运算符优先级 - 递增与成员访问

Operator precedence - increment versus member access

考虑一下:

++iterator->some_value

访问some_value之前迭代器会被转发吗?

根据cppreferenceincrementmember access两者的优先级相同,都是2。是上市的事吗?或者这是未定义的 - 特定于编译器?

成员访问 运算符-> 比前缀增量运算符具有更高的优先级。因此表达式 ++iterator->some_value 被分组,就好像你写了

++(iterator->some_value)

另一方面,if 你要写表达式 iterator->some_value++ 那么因为成员访问运算符 -> 和后缀增量运算符都有相同的优先级,所以将使用 left-to-right 关联性,这将使该表达式等同于写作 :

(iterator->some_value)++

请注意,preincrement 和 postincrement 具有不同的优先级,因此您发布的代码片段与您链接的解释性文本不完全匹配。

预增运算符的优先级低于成员访问运算符,因此++iterator->some_value等同于++(iterator->some_value)

如果你有 iterator->some_value++ 而它们具有相同的优先级,那么 left-to-right 关联性生效,它将被处理为 (iterator->some_value)++.