l + l ++与l + l相同?

时间:2010-05-16 07:10:49

标签: c++ syntax

说,尾随++在这里没有实际效果吗?

4 个答案:

答案 0 :(得分:16)

l+l++未定义。表达式中没有用于分隔对l和后增量的访问的序列点。它可以做任何事情,包括与l+l具有相同的效果。

编辑:Why is `i = ++i + 1` unspecified behavior?的问题和答案解释了序列点是什么,引用标准的相关部分并提供链接。让我再引用一次:

  

除非另有说明,否则顺序为   评估个人的操作   运算符和子表达式   个人表达和秩序   发生副作用的是   不确定的。 53)之间的   下一个序列指向一个标量   对象应具有其存储值   最多修改一次   表达的评价。   此外,只能访问先前值以确定   要存储的值。

强调我的。

第二次编辑:根据民众的要求,该段中的下一句话是:

  

本段的要求   应满足每个允许的数量   一个子表达式的排序   充分表达;否则   行为未定义。

答案 1 :(得分:0)

此后会增加l,即计算l+l并在此之后增加l,因此它会产生一些影响。 演示代码:

#include <iostream>

int main() {
       int l = 1;
       std::cout << "l+l++ = " << l+l++ << std::endl;
       std::cout << "l = " << l << std::endl;
       return 0;
}

编辑:请注意,此编译带有警告(请参阅Pascal's answer):

main.cpp: In function ‘int main()’:
main.cpp:5: warning: operation on ‘l’ may be undefined

答案 2 :(得分:-1)

警告 - 许多语言都没有规定评估操作数的顺序,因此您可能会看到2*l2*l+1作为该表达式的结果。在任何一种情况下,l之后都会高一个。

答案 3 :(得分:-4)

如果你有i+i++,它实际上就像i+i; i = i + 1