Я предполагаю, что это связано с приоритетом, но почему это законно
vector<string>::iterator iter = vec.begin();
iter++->empty();
Но это не так.
vector<string>::iterator iter = vec.begin();
++iter->empty();
Может кто-то попытается объяснить цепочку событий, которые здесь происходят.
Оператор стрелки имеет более высокий приоритет, чем приращение, поэтому ++iter->empty()
анализируется как ++(iter->empty())
не (++iter)->empty()
, Пост-инкрементная версия работает, потому что есть только один способ разбора iter++->empty()
,
Других решений пока нет …