这里我想简要解释一下答案(24)。但我在java中尝试了这段代码。我在java中得到了答案23。
#include <iostream>
using namespace std;
int main()
{
int a=10,b=2,c=0;
c=(++a + ++a);
cout <<c<<endl;
return 0;
//Here how to get answer 24
}
答案 0 :(得分:1)
c=(++a + ++a);
在C ++中,它是未定义的行为。我不知道java中该代码的行为。
C ++ 03 5表达式[expr]:
第4段:
....
在前一个和下一个序列点之间,标量对象的表达式评估最多只能修改一次存储值。此外,只能访问先前值以确定要存储的值。对于完整的子表达式的每个允许排序,应满足本段的要求 表达; 否则行为未定义。
C ++11§1.9/ 14说:
与a相关的每个值计算和副作用 full-expression在每个值计算和side之前排序 与要评估的下一个完整表达相关联的效果。
在 C ++ 17 中,未指定行为。