我想了解括号影响表达式中的优先级:为什么表达式*(b ++)不首先评估b ++?
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++
进行了测试,并得到了相同的结果。这意味着括号不会影响这种表达式的优先级吗?为什么这是两个表达式的结果是equivelant:
*(b + 1)
*(++b)
但它不是与*(b++)
的情况?
因为这几乎是后缀增量的*定义*请解释你认为它应该做什么以及与前缀增量('++ b')有什么不同。 – delnan 2014-09-25 10:39:36
tl; dr'b ++ == b',圆括号不会奇迹般地改变评估结果。 – user657267 2014-09-25 10:41:47
@delnan是啊我意识到不同之处,但那是我关心的括号。 – 2014-09-25 10:43:56