-4

根据标准 c 为什么它j= i++ * i++未定义且j=i++ & i++完全合法的声明?

4

3 回答 3

4

它们都是未定义的行为。

j = i++ * i++; // undefined behavior
j = i++ & i++; // undefined behavior

在两个示例中,object 的值i在两个序列点之间被多次修改。

于 2013-10-22T18:07:55.667 回答
1
j= i++ * i++ ;

j=i++ & i++ ;

两者都是未定义的,因为改变序列点之间的 i 值

阅读为什么这些构造是未定义的行为?

于 2013-10-22T18:08:48.250 回答
1

正如 Mystical 和 ouah 已经说过的,两者都是未定义的。

j = i++ && i++;

将是明确定义的,因为 && 快捷方式,这意味着它必须首先评估左操作数,然后 - 如果左操作数为真 - 右操作数。

于 2013-10-22T18:11:06.310 回答