如果我将数字的绝对值定义为
#define ABS(X) X >= 0 ? X : (-1) * X
什么会
ABS(2) + ABS(-3)
评价为?我的 friend 声称它评估为 2。
最佳答案
当你输入:
ABS(2) + ABS(-3)
这将替换为:
2 >= 0 ? 2 : (-1) * 2 + -3 >= 0 ? -3 : (-1) * -3
您可以将其分解:
2 >= 0 ? 2 : -5 >= 0 ? -3 : (-1) * -3
或者:
2 >= 0 ? 2 : (-5 >= 0 ? -3 : (-1) * -3)
第一部分 (
2 >= 0
) 评估为真,因此评估为 2
。请注意,您可以通过将宏编写为以下内容来轻松解决此问题:
#define ABS(X) ((X) >= 0 ? (X) : (-1) * (X))
这将按预期保持评估顺序,并使其解析为 5 而不是 2。话虽如此,使用内联函数会更干净,并避免整个场景。
关于c++ - 如何评价这个说法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18454634/