【发布时间】:2016-01-20 15:55:00
【问题描述】:
例如,我使用后
int a = 5, b = 6;
x = (a < b) ? a++ : b++;
x 得到 a 的值,即 5,a 递增到 6,这是预期的。
当我使用时
a = (a < b) ? a++ : b++;
在这一行之后,a 仍然是 5。
但是
a = (a++ < b++) ? a : b;
a 现在是 6。
为什么会发生这种情况,为什么在第一种情况下不执行增量运算符?
编辑:为了澄清,我问为什么会发生这种情况,当我分别使用这些行时,一个接一个,而不是同时使用所有三个。
【问题讨论】:
-
你为什么曾经想做那样的事情?
-
使用 gcc 4.9.3:
a = (a < b) ? a++ : b++;报告“警告:对 'a' 的操作可能未定义 [-Wsequence-point]”。 -
更多垃圾代码解释:((
标签: c ternary-operator