第四章 表达式
- p121 对象被用作右值,用的是对象的值(内容);对象被用作左值,用的是对象的身份(在内存中的位置)
- p125 环绕:符号位原本是0,由于溢出被改成了1,于是结果变成一个负值
- p125
(-m)/n=m/(-n)=-(m/n)
;m%(-n)=m%n,(-m)%n=-(m%n)
- p126 短路求值:当且仅当左侧运算对象无法确定表达式的结果时才会计算右侧运算对象的值
- p131 后置版本会将运算对象加1(减1),但是求值结果是运算对象改变之前那个值的副本,会将原始值存储下来以便返回这个未修改的内容,所以一般建议使用前置版本
- p132
cout << *iter++ << endl;
- p133 成员访问运算符:
ptr->mem
等价于(*ptr).mem
- p134 条件运算符:
cond?expr1:expr2;
- p139 sizeof运算符:
sizeof (type)
,sizeof expr
,sizeof不需要真的解引用指针也能知道它所指对象的类型 - p140 逗号运算符:首先对左侧的表达式求值,然后将求值结果丢弃,真正的结果是右侧表达式的值
- p144 命名的强制类型转换:
cast-name<type>(expression);
cast-name | 作用 |
---|---|
static_cast | 不包含底层const |
const_cast | 只能改变运算对象的底层const |
reinterpret_cast | 为运算对象的位模式提供较低层次上的重新解释 |
旧式:type (expr)
和(type) expr
第五章 语句
- p154 C++语言提供了一组控制流语句以支持更复杂的执行路径
- p158 悬垂问题:确定else和哪个if匹配
- p163 即使
defaul
标签下没有工作,定义一个default
标签也是有意义的,说明考虑到了默认的情况 - p165 定义在
while
条件部分或者while
循环体内的变量每次迭代都经历从创建到销毁的过程 - p168 C++11新标准
for (declaration : expression)
statement
- p169
do while
语句应该在括号包围起来的条件后面用一个分号表示语句结束;condition使用的变量必须定义在循环体之外 - p170
break
负责终止离他最近的while、do while、for或switch语句 - p171
continue
终止最近的循环中的当前迭代并立即开始下一次迭代 - p172
goto
:不要使用 - p177 try语句块和异常处理
try{
...
throw runtime_error("ERROR");
} catch (runtime_error err){
cout << err.what() << endl;
}
- p175 每个标准异常类都定义了名为
what
的成员函数 - p175 如果最终还是没有找到任何匹配的
catch
子句,程序转到terminate
的标准库函数,一般情况下,将导致程序非正常退出