C++旧版课程库
C++第 2 期查看课程总览

048 加加语法的差异

主要内容

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. 小结和举例

  • 典型语句举例
  • for 循环
  • 在下面的语法是等价的 因为在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
    
    课后练习