什么是"序列点"?
未定义的行为和序列点之间的关系是什么?
我经常使用有趣和复杂的表达方式a[++i] = i;,让自己感觉更好.我为什么要停止使用它们?
如果您已阅读此内容,请务必访问后续问题重新加载未定义的行为和序列点.
(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)
我是Java新手,有CI的背景正在通过Khalid Moughal的书.在页126上他举了一个例子
int i = 10;
int k = ++i + --i; // ((++i) + (--i)).
Run Code Online (Sandbox Code Playgroud)
这显然违反了C语言中的序列点概念,它表示在相同的序列点中不能多次更改变量的值.我的问题是,相同的序列点规则是否适用于java?他可能只是为了解释前缀一元运算符的概念及其副作用而采用这个例子,但这样一个明显违反语言非常基本规则的例子并不像Khalid Moughal那样出名.
所以请确认一下.
希望你们人们把它带入正确的精神.
谢谢,
Mawia
可能重复:
C#:功能评估顺序(vs C)
代码段:
i += ++i;
a[++i] = i;
int result = fun() - gun();
//statement of similar kind
Run Code Online (Sandbox Code Playgroud)
他们的行为在C#中定义得很好吗?在C++中,此类代码调用未定义/未指定的行为.还请在回复中引用语言规范中的相关部分!