C++ Primer Chapter 4
Expression 表达式
定义:含有一个或多个运算符并在计算后能产生结果
|
|
Overload Operator 重载运算符
- 可以改变内部的操作方式
- 不能改变优先级(eg:让+比*更优先)
- 不能达到改变操作数,改变操作数数目的目的
左值和右值(c++11)
|
|
- 左值使用的是对象的identity(location in memory),右值直接使用对象的value(内容contents);
- 右值的使用可以避免拷贝;
Precedence & Associativity 优先级和结合性
运算符之间有优先级的不同,用括号可以改变。优先级解决的问题是,先计算哪个运算符,结合性解决的问题是,当一个操作码的左右两边都有运算符,且优先级相同时,该操作码属于哪个运算符。
不要🙅在同一个语句中既改变它的值又引用它
例如:
|
|
- 可能实际的运行顺序和我们想象的不一样
- 可读性差
再如:
|
|
其中*beg = toupper(*beg++)
可能被编译成:
|
|
也有可能是
|
|
短路
对于 &&
和 ||
,能通过左边的值判断出整个表达式的值的时候,不会再计算右边表达式的值
order of evaluation, precedence and ssociativity 评估(运算)顺序
对于:
|
|
计算整体式子的值,先计算g()*f()
,再相加f()
和h()
,但编译器没办法保证先计算哪个函数的值,如果这几个函数之间有依赖关系的话,容易出现错误🙅。
C++ Primer Chapter 5
Tips:
- 空语句可读性差
- 流程控制语句(if-else,while()等)中,不管写多少语句(compound statement),都用花括号括起来
|
|
try-catch
|
|