两中转换函数: 单参数构造函数(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
如果你只想处理未被初始化的内存,你应该绕过new和delete操作符,而调用operator new 获得内存和operator delete释放内存给系统,这与在C中调用malloc和free等同。
如果你用placement new在内存中建立对象, 应该显式调用对象的析构函数来解除构造函数的影响