Effective C++ 9.5分
读书笔记 1-12items
太阳太阳

C++分为四个部分:C / object-oriented C++ / template C++ / STL ,高效变成守则视情况而变,取决于你使用C++的哪一部分。 对于单纯常量,最好以const对象或者enums替代 #defines 对于形似函数的宏,最好改用inline函数代替#defines 关键字const出现在*号左边,表示被指物是常量,如果出现在*号右边,则表示指针是常量 利用const成员函数实现其non-const孪生兄弟 永远在使用对象之前先将他初始化。对于任何成员的内置类型,你必须手工完成此事。构造函数最好使用成员初始列,而不要再构造函数本体内使用赋值操作。初始列列出的成员变量,其排列次序应该和它们在class中声明的次序相同。 当不能保证你要使用的另一个文件中的类能在你使用之前初始化时,你就可以将它也变成本地文件 为驳回编译器自动(暗自)提供的功能(比如说提供复制函数或者operator=函数),可将相应的成员函数声明为private并且不予实现,使用像Uncopyable这样的base class 也是一种做法。 多态性质的base classes应该声明一个virtual析构函数。任何class只要带有virtual函数,都几乎确定应该也有一个virtual析构函数 Classes的设计目的如果不是作为base classes使用,或不是为了具备多态性,就不该声明virtual析构函数 析构函数绝对不要吐出异常,如果一个析构函数调用的函数有可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们(不传播)或者结束程序 在构造和析构期间不要调用virtual函数,因为这类调用从来不下降至derived class,他通常都是调用的本层的函数,即使它是virtual return *this的引用主要是用在运算符重载那里, 也就是 class A { public:: A& operator=(const A&a) { …. //一些操作 return *this; } }; 这是为了支持连续的=号操作,如:A a,b,c .调用(a=b)=c,这种情况下就要要求重载操作符=号必须返回一个*this的引用,这样a=b才能得到一个更新后的a,再用c对其赋值才能作用到更新 的a身上,如果不返回*this的引用,将无法完成第二次用c的那个赋值 确保当对象自我赋值时operator=有良好行为。其中技术包括比较”来源对象“和”目标对象“的地址,但这毕竟慢,精心周到的语句顺序,以及copy-and-swap,下面附代码 确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象时,其行为仍然正确 copying函数应该确保复制”对象内的所有成员变量“及”所有base class成分“ 不要尝试以某个copying函数实现另外一个copying函数。应该将共同的技能放进第三个成员函数中,并有他们共同调用

0
《Effective C++》的全部笔记 24篇
豆瓣
免费下载 iOS / Android 版客户端