Определен ли я = 0, ++ i?
Недавно я узнал об операторе ,
и о том, что он вводит точку последовательности.
Я также узнал, что следующий код привел к поведению undefined:
i = ++i;
Потому что i
был дважды изменен между двумя точками последовательности.
Но как насчет следующих кодов?
i = 0, ++i;
i = (0, ++i);
Пока я знаю правила, я не могу прийти к выводу. Так определяется ли это поведение или нет?
edit: Точно так же, как @paxdiablo упоминает, определяется или нет, это действительно плохая практика, которой следует избегать. Этот вопрос задается исключительно для образовательных целей и лучшего понимания "правил".
Ответы
Ответ 1
Да. =
имеет более высокий приоритет, чем ,
, поэтому это выражение эквивалентно (i = 0), ++i
. ,
- это точка последовательности, поэтому гарантируется, что ++i
происходит после назначения.
Я не уверен, существует ли i = (0, ++i)
. Я предполагаю, что нет; нет никакой точки последовательности между приращением и присваиванием.
Ответ 2
i = 0, ++i;
Как указывал другой ответ, это не Undefined Поведение.
i = (0, ++i);
В этом случае поведение Undefined, потому что между ++i
и присваиванием я нет точки последовательности.
i = (0, ++i, 0)
Поведение хорошо определено 1 в С++ 03, IMHO.
1 См. расширенное обсуждение для аналогичного выражения.Суб >