什么是"序列点"?
未定义的行为和序列点之间的关系是什么?
我经常使用有趣和复杂的表达方式a[++i] = i;,让自己感觉更好.我为什么要停止使用它们?
如果您已阅读此内容,请务必访问后续问题重新加载未定义的行为和序列点.
(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)
在这段代码中:
int y = 10;
int z = (++y * (y++ + 5));
Run Code Online (Sandbox Code Playgroud)
我的期望
首先y++ + 5将执行,因为最里面的括号的优先级.因此,值y将为11,并且此表达式的值将为15.然后++y * ()将执行.所以12*15 = 180.所以z = 180
我得到了什么
Z = 176
这意味着VM从左到右不遵循运营商优先级.那么我对运算符优先级的理解是错误的吗?
鉴于此代码:
int p,k=8;
p=k*(++k-8);
System.out.println(p);
Run Code Online (Sandbox Code Playgroud)
何时++k被评估k=9然后变得k*(9-8)给予9*1
int p,k=8;
p=(++k-8)*k;
System.out.println(p);
Run Code Online (Sandbox Code Playgroud)
但这给出了9作为输出