主要内容 #
1. 自加一 #
在之前的学习中,我们已经了解了 i++;
i++ 等价于 i = i+1;
这大大简化了我们的书写;
除了 i++;
现在我们来介绍一个新的语法:++i;
++i 也等价于 i = i+1;
那++i 和 i++ 难道没有区别吗?
先一起来运行如下的代码:并描述一下你看到的现象。
#include < iostream > int main() { int da(20), shi(20); std::cout << da++ << std::endl; std::cout << da << std::endl; std::cout << +shi << std::endl; std::cout << shi << std::endl; return 0; }
2. 先加加 和 后加加 #
现象总结如下:
cout << da++ 先输出20,然后输出21 ------------------------------------ cout << ++shi 先输出21,然后输出21
过程拆解:
cout << da++ 先输出 da,然后执行 da = da + 1; ----------------------------------------------- cout << ++shi 先执行 da = da + 1;然后输出 da;
在复合语句中,“先++”都是“先执行”。
3. 小结和举例 #
在下面的语法是等价的
因为在C++的底层机制中, ++i 的开销要小于 i++。
所以,为了养成好习惯和便于记忆,我们总结了下面的规则:
大多数情况,优先选用 ++i,效率高,速度快;
++i 的优先级高于四则运算和括号,一般情况下,++i 都是最先计算的。
在复合语句中, ++i(也就是 “先++”)都是“先执行”。
4. 自减一 #
除了 ++ 之外,还有 —
它表示“自减一”。它在复合表达式中的运算规则,和 ++ 完全一样。
int dashima=50; int da = dashima--; // da = 50,然后 dashima = dashima - 1,最后 dashima = 49; int sh = --dashima; // dashima = dashima - 1,这时候 dashima = 49,最后 sh = 49;
习题 #
小练习,判断下面表达式的值:(大家在电脑上,应该多运行不同的表达式,加深对 ++ — 的认识)
int a(5); 6*a++ 6*(a++) 6*++a 6*(++a) 6*++a++ a*++a ++a*++a ++a*--a