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通常为操作数的位模式提供层次较低的重新解释

 

猜你喜欢

转载自blog.csdn.net/qq_34935373/article/details/90486065