解决方法是什么:
int i=5;
a= ++i + ++i + ++i;
如果我们按正常的从右到左评估,结果应为21(6 + 7 + 8)。
我记得在学校读书时答案是24(8 + 8 + 8)
但是我在CodeBlocks上试过,www.ideone.com,即gcc 4.8.1编译器,现在我得到22。 有人可以解释原因吗
答案 0 :(得分:0)
该表达式中没有Sequence Points,因此您无法解决它,它是未定义/编译器相关的。
答案 1 :(得分:0)
它是由C / C ++标准undefined or implementation-defined behavior定义的。语言标准不指定行为,它允许编译器实现选择(并且通常记录在案)。
另请参阅另一个StackOverflow问题:Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)。
GCC在您的示例中所做的是以下内容:
int i = 5;
a = ++i + (++i + ++i); // it first gets the value of i and increments it two times
a = ++i + (7 + 7); // it then reads the new value of i, does the addition and save it as a constant in the stack
a = ++i + 14; // it then gets the value of i and increments it
a = 8 + 14; // it then reads the new value of i and add it to the constant
a = 22;