На этот вопрос нет однозначного ответа. Ответ зависит от характера std::set<SomeType>::iterator
типа. Если это определенный пользователем тип (то есть класс с перегруженными операторами), то поведение iter = ++iter
определяется и действительно эквивалентно простому ++iter
. Однако, если std::set<SomeType>::iterator
является встроенным типом, то iter = ++iter
создает неопределенное поведение, поскольку он изменяет один и тот же объект дважды в одном выражении без промежуточной точки последовательности (нарушение требований, представленных в 5/4 стандарта языка ).
Таким образом, теоретически в общем случае следует избегать подобных действий, поскольку в общем случае поведение не определено. На практике std::set<SomeType>::iterator
обычно будет пользовательским типом, а iter = ++iter
будет работать. Тем не менее, это не причина использовать такие выражения в коде.