++ i和i ++之间的区别

aR.*_*aR. 5 c++

可能的重复:
i ++或++ i的效率更高?
我们如何解释表达式的结果(++ x)+(++ x)+(++ x)?
循环中i ++和++ i之间的区别?

我正在尝试这两个程序:

void fun(){
     int k = 0;
     int i= 10;
     k = (i++)+(++i);
     cout << k << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出= 22,因为i ++将给出10而++我将评估为12.

void fun(){
     int k = 0;
     int i = 10;
     k = (++i)+(++i);
     cout << k << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出= 24

它应该是23我猜,还是有些东西我无法看到?

小智 19

注意:您正在调用未定义的行为(在序列点之间修改变量两次)

  • 看到有多少人回答了问题*而没有抓住未定义的部分,这有点可怕.可悲的是,仍然大多数人认为任何适用于他们的编译器和测试用例的"有效"...... (9认同)

Kir*_*sky 6

根据C++ 03 Standard 5/4,有问题的程序的行为是未定义的:

除非另有说明,否则单个算子的操作数和个别表达式的子表达式的评估顺序以及副作用发生的顺序是未指定的.53)在前一个和下一个序列点之间,标量对象应通过表达式的计算最多修改其存储值一次.此外,只能访问先前值以确定要存储的值.对于完整表达式的子表达式的每个允许排序,应满足本段的要求; 否则行为未定义.


归档时间:

查看次数:

1499 次

最近记录:

6 年,11 月 前