C++中:*a++ 和(*a)++ 有什么不同?
错误理解:
优先级:() > ++ > *
所以: 对b=*a++
就是相当于:a++; b=*a;
注意此时a可能是自增后的迭代器或是指针
正确理解:
*a++
若b=*a++
就是相当于:b=*a;a++;
注意此时a可能是自增后的迭代器或是指针
(*a)++
若b=(*a)++
就是相当于:b=*a;
,之后 *a
这个值自增1,不是a自增!
解释:
首先() > ++ > *
,即后置递增运算符的优先级高于解引用运算符,这点是没错的。
但是后置递增运算符的原理是:先将运算对象存储一份副本,然后递增。
由于运算符优先级,虽然*a++
确实等价于*(a++)
,但是真正的运行流程是:a++
先把a
存一个副本a'
,然后a
的值加1,最后把a'
解引用,赋值给b
。
参考书籍:C++ Primer