说,尾随++
在这里没有实际效果吗?
答案 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*l
或2*l+1
作为该表达式的结果。在任何一种情况下,l
之后都会高一个。
答案 3 :(得分:-4)
如果你有i+i++
,它实际上就像i+i; i = i + 1