如果我将数字的绝对值定义为

#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/

10-12 22:41