C ++运算符优先级=,*和++

时间:2015-01-08 21:53:46

标签: c++ operator-precedence

我对此指针值赋值有疑问:

*p++ = *q++;

根据 Operator Priority Table

运营商的优先事项是" ++" > " *" > " ="

但是上述陈述的结果是分配" ="首先,如下所示

*p = *q;
p++;
q++; 

为什么?

3 个答案:

答案 0 :(得分:3)

后增量运算符在其值已经计算之后递增其操作数因此,指针取消引用发生在该行之前指针所持有的值上。但是,你给出的优先顺序是正确的;表达式确实等同于

(*(p++)) = (*(q++))

答案 1 :(得分:2)

因为它们是后缀运算符,而不是前缀!

答案 2 :(得分:0)

你错过了一个重要的区别。运营商有一个价值,和 它可能有副作用。对于postfix ++,值为 在增量之前的值,副作用是 增量。表达式中使用的是值。旁边 效果可能在完整表达结束之前的任何时间发生(in 前C ++ 11术语,但实际效果没有改变);编译器可能 首先递增两个指针,保存它们之前的值 在表达式的其余部分中注册并使用它们,或者使用 值直接来自内存,并推迟两者的增量 指针直到表达式结束。或任何组合 导致相同可观察行为的操作。