是`y = x = x + 1;`未定义的行为?
这段代码是:
y = x = x + 1;
C中的未定义行为?
回答你的问题
没有。
会发生什么
这将发生:
int x = 1; /* ASSUME THIS IS SO */ y = x = x + 1; /* Results: */ y == 2; x == 2;
如何编译
同样如下:
x += 1; y = x;
为什么这不是未定义的
因为您没有在同一个表达式中编写x
,所以您可以阅读它。 您只需将其设置为自身+ 1
,然后将y
指定为x
的值。
你的未来
如果您发现代码令人困惑,可以使用括号来提高可读性:
y = x = (x + 1);
不,你的表达是正确定义的。 您可能正在寻找y = x = x++;
,不是。
不。你只修改一次x
,并且由于=
的右关联性,赋值发生在赋值给y
之前。 即使它确实发生过,但仍然只有一个x
修改。 您的陈述与y = ++x
一样合法。