【发布时间】:2014-09-25 10:37:55
【问题描述】:
我试图了解括号如何影响表达式中的优先级:
int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
auto b = arr;
std::cout << *(++b) << std::endl;
// output : 1
在这段代码中,我得到了预期的输出,但如果我将其更改为:
std::cout << *(b++) << std::endl;
// output 0
我得到0 作为输出。由于括号的原因,我认为 b++ 将首先被评估,然后取消引用。看来我错了,然后我完全删除了括号并使用*++b和*b++进行测试并得到相同的结果。这是否意味着括号不会影响这种表达式的优先级?为什么这两个表达式的结果是等价的:
*(b + 1)
*(++b)
但*(b++) 不是这样?
【问题讨论】:
-
因为这几乎是后缀增量的定义?请解释您认为它应该做什么以及这与前缀增量 (
++b) 有何不同。 -
tl;dr
b++ == b,括号不会神奇地改变评估结果。 -
@delnan 是的,我知道其中的区别,但这就是我所关心的括号。
标签: c++ pointers operators operator-precedence