我指的是this question
#define max(a,b) ((a<b)?b:a)
这会产生一些副作用,如答案所述;
如果您使用max(a ++,b ++)作为示例(a或b),则会出现副作用 将增加两次)
我无法理解这种副作用;当我们使用max(a ++,b ++)时,为什么a或b会递增两次?
答案 0 :(得分:7)
如果您在代码中使用max(a++,b++)
,
x = max(a++,b++);
文本替换发生在
x = ((a++<b++)? b++ : a++);
^ ^ ^---------Increment if condition is true
|---|---------Increment
因此,您将逐步增加a
或b
...
答案 1 :(得分:1)
max(a++, b++)
将展开为((a++ < b++) ? b++ : a++)
。从左侧开始评估时,表达式(a++ < b++)
优先,并且会增加a
和b
。这是第一个增量。然后,根据<
运算符的输出,a
或b
将再次递增(这是第二个增量)。