More Effective C++精简版(2)

4.1
        两中转换函数: 单参数构造函数(single-argument constructors)和隐式类型转换运算符 都可能是危险的,此中切记不可转换用户自定义类型,即使是用explicit声明

        在多数情况下,显式转换函数的使用虽然不方便,但是函数被悄悄调用的情况不再会发生,这点损失是值得的。

 4.2
         increment的前缀形式有时叫做“增加然后取回”,后缀形式叫做“取回然后增加”

 
4.3
       C++使用布尔表达式短路求值法(short-circuit evaluation)。一旦确定了布尔表达式的真假值,即使还有部分表达式没有被测试,布尔表达式也停止运算

        空指针调用strlen,结果不确定

你不能重载下面的操作符:

.              .*              ::             ?:

new          delete        sizeof      typeid

static_cast dynamic_cast const_cast reinterpret_cast

你能重载:

operator new        operator delete

operator   new[]    operator delete[]

+    -   *   /   %   ^     &   |     ~

!    =   <   > +=   -=   *=   /=   %=

^= &= |= << >>   >>= <<= ==   !=

<= >= && || ++   --    ,   ->* ->

() []

操作符重载的目的是使程序更容易阅读,书写和理解,而不是用你的知识去迷惑其他人。如果你没有一个好理由重载操作符,就不要重载 

 4.4
        如果你只想处理未被初始化的内存,你应该绕过newdelete操作符,而调用operator new 获得内存和operator delete释放内存给系统,这与在C中调用mallocfree等同。

        如果你用placement new在内存中建立对象, 应该显式调用对象的析构函数来解除构造函数的影响

原文地址:https://www.cnblogs.com/ethan/p/673574.html