Является ли iter ++ -> empty () допустимым выражением?

Является iter++->empty() юридическое выражение?

iter является iterator из vector из strings.

Я спрашиваю, потому что с учетом приоритета операторов как -> а также () должен предшествовать приращению постфикса, но я действительно не знаю, как операнды должны быть сгруппированы.

На моем компиляторе это работает (выражение дает empty() результат для первой строки и iter указывает на вторую строку), но я все еще задаюсь вопросом, является ли это неопределенным поведением.

редактировать

Я только что нашел решение (я думаю):

iter++->empty() должен быть таким же, как (*iter++).empty()

поэтому с учетом правил ассоциативности и приоритета группировка должна быть:

(((*(iter++)).empty) ())

Это верно?

1

Решение

Это законно, но не делай этого.

Задавать себе этот вопрос является достаточной причиной, чтобы разбить его на два утверждения:

iter->empty();
iter++;
5

Другие решения

Принимая итератор it действительно, выражение it++->empty() четко определен

0

При условии, что iter->empty() является верным утверждением, ответ — да. Оператор постинкремента не меняет тип iterпросто увеличивает его после empty() Метод был выполнен.

Тем не менее, я бы рекомендовал разделить его на два оператора, так как (особенно пост-) операторы инкремента часто делают ваш код менее понятным. Так почему бы не пойти на:

iter->empty();
iter++;
0
По вопросам рекламы [email protected]