相关疑难解决方法(0)

未定义的行为和序列点

什么是"序列点"?

未定义的行为和序列点之间的关系是什么?

我经常使用有趣和复杂的表达方式a[++i] = i;,让自己感觉更好.我为什么要停止使用它们?

如果您已阅读此内容,请务必访问后续问题重新加载未定义的行为和序列点.

(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)

c++ c++-faq undefined-behavior sequence-points

970
推荐指数
4
解决办法
10万
查看次数

为什么不遵循运算符优先级?

在这段代码中:

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从左到右不遵循运营商优先级.那么我对运算符优先级的理解是错误的吗?

java operators operator-precedence

21
推荐指数
3
解决办法
2291
查看次数

使用前缀增量运算符和括号优先级对数学表达式进行澄清

鉴于此代码:

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作为输出

java math operator-precedence associativity

0
推荐指数
1
解决办法
74
查看次数