gpt4 book ai didi

c - C 中的结合性和序列点

转载 作者:太空宇宙 更新时间:2023-11-04 07:36:32 25 4
gpt4 key购买 nike

由于 '?' 的结合性是从右到左,任意 2 个连续的 '?'运营商必须这样对待,对吧?

现在,

int x=-1;
int y=x?x++?x:-1:1;

我希望它被执行为:

int y = x ? (x++?x:-1) : 1;

既然是从右往左执行,遇到第一个'?'语句中x的值为0,表达式为

int y= x? 0 : 1;

因此我预计 y 为 1,但它在我的 dev-cpp 上显示为零。我哪里错了?

最佳答案

您的评估顺序有误。在 中? b : ca 总是先求值,然后是 bc 求值。

我已经标记了你的例子,这样我就可以识别子表达式:

            c
int y=x?x++?x:-1:1;
a bbbbbbbb

(a) 被求值,产生 -1,所以 (b) 被求值。在那里,x++ 被求值,再次产生 -1,所以 (c) 被求值。此时,x 为 0。

或者,使用更详细、更清晰的代码,就好像你说:

int x = -1;
int y;
if (x != 0)
{
int new_x = x + 1;
if (x != 0)
{
y = new_x;
}
else
{
y = -1;
}
}
else
{
y = 1;
}

关于c - C 中的结合性和序列点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8352399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com