Ошибка префиксного оператора C++

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

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

Но это не так.

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

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

1 ответ

Решение

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

Другие вопросы по тегам