2016-02-11 8 views
3

Я предполагаю, что это связано с старшинства, но почему эта правоваяпрефикс оператора инкремента ошибки C++

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

Но это не так.

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

Может кто-то попытаться объяснить цепочку событий, которые происходят здесь.

ответ

7

Оператор стрелки имеет более высокий приоритет, чем приращение, поэтому ++iter->empty() разобран как ++(iter->empty()), а не (++iter)->empty(). Версия post-increment работает, потому что есть только один способ разбора iter++->empty().