在 C 运算符优先级的上下文中。实际上,下面的代码将被评估如下:
int32_t * result = (int32_t *) addr_base + offset;
|
|
↓
int32_t * result = ((int32_t *) addr_base) + offset;
但是,我在下表中看到的是 cast
和 +
应该从右到左计算。换句话说,在我的示例中 +
是 cast
的正确选择,因此我希望上面的第一条语句将像这样计算:
int32_t * result = (int32_t *) (addr_base + offset);
因为 +
在 cast
的右侧(所以根据表的优先级更高)。
为什么会发生这种情况?
最佳答案
第 2 行中的 +
是一元加运算符。这类似于一元否定运算符(例如 x = -y
)
加法运算符在第 4 行,优先级低于强制转换。
如果两个运算符具有相同的优先级,则顺序由关联性(从左到右或从右到左)给出
关于c - C 中具有相同优先级的运算符如何求值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57227849/