3

優先順位に関係していると思いますが、なぜこれが合法なのですか

vector<string>::iterator iter = vec.begin();
iter++->empty();

しかし、そうではありません。

vector<string>::iterator iter = vec.begin();
++iter->empty();

誰かがここで起こる一連の出来事を説明しようとすることができますか.

4

1 に答える 1

7

アロー演算子はインクリメントよりも優先順位が高いため、 ではなく++iter->empty()として解析されます。ポスト インクリメント バージョンが機能するのは、解析する方法が 1 つしかないためです。++(iter->empty())(++iter)->empty()iter++->empty()

于 2016-02-11T00:50:24.027 に答える