Effective C++ 学习笔记

第一章.让自己习惯C++


  • 条款2.尽量以const, enum, inline 替换 #define
    A.以 const 替换 #define:
    原因1. #define 在预处理阶段进行了替换,然后编译阶段不将替换前的名称写入符号表,编译错误信息中不会显示宏名称
    原因2. const 可以将变量的作用域限制在class内,#define定义的宏在包含了该头文件的文件里都可以使用
    原因3. const 有类型检查,define只是简单的字符替换
    B.以 enum 替换 #define:
    原因1. 旧式编译器不支持类的static成员在声明式上获得初值。
    但是如果在类的编译期间需要一个常量值(例如用于确定数组大小),可使用enum。
    而且enum不能被取址,与define很相像
    原因2. enum是模版元编程的基础技术,必须认识它。(虽然我还并不知道什么是模版元编程_
    C.以 inline 替换 #define
    原因1. 宏函数中有++判断会导致变量数值变化

  • 条款3.尽可能使用const
    A.将某些东西声明为const可使编译器帮助检测出错误用法。
    B.const用于成员函数:
    1.两个成员函数如果只是常量性不同,可以被重载
    2.改善C++程序效率的一个根本办法是传const引用,用const修饰函数可以使函数内无法改变外部取到的变量
    3.如果希望某个成员变量可以在const函数中被改变,在声明变量时使用mutable修饰它
    C.当const和non-const成员函数有着等价实现时,可以通过将non-const对象转型成const,调用const成员函数,在将返回值转型成non-const,反之不推荐

  • 条款4.确定对象被使用前已被初始化
    A. C++规定,对象的成员变量的初始化动作发生在进入构造函数本体之前,即初始化列表之中。在构造函数体内完成的是赋值。
    B. 如果成员变量是const或引用,他们就一定需要初值,不能被赋值,参考A。
    C. 成员变量按照声明次序初始化,与初始化列表中的顺序无关。
    D. C++无法确定不同编译单元(基本是一个源码文件+一个头文件)中non-local-static对象的初始化先后次序,
    如果两个static变量初始化有次序依赖,可能会导致使用未初始化的值
    所以使用static成员变量的最佳方式,是将该变量搬到自己的专属函数内(该变量在该函数中被声明为static),第一次调用的时候初始化该变量

第二章.构造/析构/赋值运算


  • 条款5.了解C++默认编写并调用哪些函数
    A. 构造、拷贝构造、赋值、析构、取址符,const取址符(后两者书中没有提到)
    B. 内含引用或const成员的类,如果想支持赋值操作,必须自己定义赋值操作符函数,编译器不会提供默认赋值操作符

  • 条款6. 若不想使用编译器自动生成的函数,就该明确拒绝
    A. 所有编译器产出的默认函数都是public
    B. 将拷贝构造函数或拷贝赋值操作符声明为private,可以阻止编译器生成默认版本。只声明不定义,可以使调用者获得连接错误。

  • 条款7. 为多态基类声明virtual析构函数
    基类指针指向派生类对象,析构时应调用派生类的析构函数

  • 条款8. 别让异常逃离析构函数
  • 条款9. 绝不在构造和析构过程中调用virtual函数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容