1、表达式由一个或多个操作数通过操作符组合而成。每个表达式都会产生一个结果。如果表达式中没有操作符,则其结果就是操作数本身的值。对于含有操作符的表达式,它的值通过对操作数做指定操作获得。除了特殊用法外,表达式的结果是右值,可以读取该结果值,但是不允许对它进行赋值。
2、如果两个操作数都是负数,求模操作的结果则为负数(或零);如果只有一个操作数为负数,除法操作和求模操作的结果取决于机器。
3、对于位操作符,由于系统不能确保如何处理其操作数的符号位,所以强烈建议使用unsigned整型操作数。
4、赋值操作符的左操作数必须是非const的左值。数组名是不可修改的左值:因此数组不可用作赋值操作的目标。
与下标和解引用操作符一样,赋值操作符也返回左值。
5、点操作符用户获取类类型对象的成员。
6、sizeof操作符的作用是返回一个对象或类姓名的长度,返回值的类型为size_t,长度的单位是字节。参考资料:sizeof
7、逗号表达式的结果是其最右边表达式的值。
8、只有当操作符的两个操作数涉及到同一个对象,并改变其值时,操作数的计算次序才会影响结果。
9、如果不提供显示初始化,动态创建的对象与在函数内定义的变量初始化方式相同。对于类类型的对象,用该类的默认构造函数初始化;而内置类型的对象则无初始化。
一旦删除了指针所指向的对象,立即将指针置为0,这样就非常清楚地表明指针不再指向任何对象。
如果其他动态对象一样,const动态对象也是使用删除指针来释放的。
10、对于包含signed和unsigned int型的表达式,其转换可能出乎我们的意料。表达式中的signed型数值会被转换为unsigned型。
11、不将数组转换为指针的例外情况有:数组用作取地址(&)操作符的操作数或sizeof操作符的操作数时,或用数组对数组的引用进行初始化时,不会将数组转换为指针。参考资料:C++ Primer Chapter4
12、命名的强制类型转换符号的一般形式如下:
cast-name<type>(expression)
其中cast-name为static_cast、dynamic_cast、const_cast和reinterpret_cast之一,type为转换的目标类型,而expression则是被强制转换的值。强制转换的类型指定了在expression上执行某种特定类型的转换。
dynamic_cast支持运行时识别指针或引用所指向的对象。
const_cast将转换掉表达式的const性质。只有使用const_cast才能将const性质转换掉。在这种情况下,试图使用其他三种形式的转换都会导致编译时的错误。类似地,除了添加或删除const特性,用const_cast符来执行其他任何类型转换,都会引起编译错误。
static_cast编译器隐式执行的任何类型转换都可以由它显示完成。(尝试转换一个对象的类型到另一个无关的类型将失败。)
reinterpret_cast通常为操作数的位模式提供较低层次的重新解释。(总是成功的“欺骗”编译器:转换一个对象的类型到另一个无关的类型。)
参考资料:reinterpret_cast