###C++ Primer第5版 学习笔记
####第四章
-
函数调用也是一种运算符,对运算对象的个数没有限制
-
重载运算符时,运算对象的个数,运算符的优先级和结合律都无法改变
-
左值表达式的求值结果是一个对象或者函数,但常量对象左值不能被赋值
-
赋值运算符需要左值作为左侧运算对象,结果也是左值
-
解引用,下标运算符求值结果为左值
-
如果表达式求值结果为左值,decltype 作用于该表达式得到引用类型
int *p;
,decltype (*p)
是int &
,decltype (&p)
是int **
-
&& || ?: ,
这四种运算符规定了求值顺序,其他的都没规定,求值顺序与优先级,结合律无关 -
布尔值不应参与算数运算
bool b = true; bool b2 = -b;//b2==true!!
-
商一律向 0 取整
-
推荐写法
while ((i = get_value()) != 42) { /* balabala */ }
-
箭头运算符返回左值还是右值取决于成员所属的对象是左值还是右值
-
不应将有符号数用于位运算,否则符号位的行为依赖于机器
-
移位运算的移动位数不能超过对象占用的位数
-
sizeof 返回 size_t 类型,不会求值,无效指针也可
-
对数组 sizeof 返回数组占用空间大小,对 vector 则返回该类型固定部分的大小(比如我的编译器,vector 总是12)
-
强制类型转换
- static_cast 可用于任何明确定义的类型转换,只要不包含底层 const 即可.
- const_cast 只能改变底层 const,可用于重载函数
- reinterpret_cast 用于位的低层次重新解释,本质上依赖于机器