C++primer学习笔记(三)
第五章 表达式
1.短路求值:逻辑与和逻辑或操作符总是先计算其左操作数,然后再计算其右操作数。只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解其右操作数;
2.赋值操作符的左操作数必须是非const的左值;
3.数组名是不可修改的左值:因此数组不可用作赋值操作的目标;
4.只要被赋值的每个操作数都具有相同的通用类型,C++语言允许将这多个赋值操作写在一个表达式中:
int ival,jval;
ival=jval=0;
5. 将sizeof用于表达式expr是,没有计算表达式expr的值。特别是在sizeof *p 中,指针p可以持有一个无效地址,因为不需要对p做解引用操作;
在编写复杂表达式时候,注意运算符的优先级,如果不确定使用圆括号,++运算符优先级高于*
6.C++保证:删除0值得指针是安全的;
7.动态创建的const对象必须在创建时初始化,并且一经初始化,其值就不能再修改;
混合类型的表达式中,操作数会被隐式转换成相同类型;
8.用作条件的表达式被转换为bool类型;
9.用一表达式初始化某个变量,或将一个表达式赋值给某个变量,则该表达式被转换为该变量的类型;
大多数隐式转换要么是将操作数转化为表达式中的最大类型,要么就是在赋值表达式中将右操作数转化为左操作数的类型;
10.数组用作取地址&操作符的操作数或sizeof操作符的操作数时,或用数组对数组的引用进行初始化时,不会将数组转换为指针;
11.指向任意数据类型的指针都可转换为void*类型,整形数值常量0可转换为任意指针类型;
12.C++自动将枚举类型的对象或枚举成员转换为整形,其转换结果可用于任何要求使用整数值的地方;
13.当使用非const对象初始化const对象的引用时,系统将非const对象转换为const对象。此外,还可以将非const对象的地址(或非const指针)转换为指向相关const类型的指针;
14.将istream类型转换为bool类型意味着要检验流的状态;
15.命名的强制类型转换符号的一般形式如下:
cast-name<type>(expression);
其中cast-name为static_cast 、dynamic_cast 、const_cast和reinterpret_cast之一,type为转换的目标类型,而expression则是被强制转换的值;
其中:dynamic_cast支持运行时识别指针或者引用所指向的对象。
Const_cast将换掉表达式的const性质;
编译器隐式执行任何类型转换都可以有static_cast显示完成;
Reinterpret_cast通常为操作数的位模式提供层次较低的重新解释