Consider this:
iterator->some_value
Will the iterator be forwarded before some_value
is accessed?
According to cppreference increment and member access both have the same precedence of 2. Does the order in which they are listed matter? Or is this undefined - compiler specific?
CodePudding user response:
The member access operator ->
has higher precedence over the prefix increment operator. Thus the expression iterator->some_value
is grouped as if you had written
(iterator->some_value)
On the other hand, if your were to write the expression iterator->some_value
then since both the member access operator ->
and the postfix increment operator have the same precedence, so left-to-right associativity will be used, which will make this expression equivalent to writing :
(iterator->some_value)
CodePudding user response:
Note that preincrement and postincrement have different precedences, so the code snippet you've posted doesn't quite match the explanatory text you've linked.
The preincrement operator has a lower precedence than the member access operator, so iterator->some_value
is the equivalent of (iterator->some_value)
.
If instead you had iterator->some_value
where they both had the same precedence, then the left-to-right associativity comes into effect, and it would be processed as (iterator->some_value)
.