Подтвердить что ты не робот

Определен ли я = 0, ++ i?

Недавно я узнал об операторе , и о том, что он вводит точку последовательности.

Я также узнал, что следующий код привел к поведению undefined:

i = ++i;

Потому что i был дважды изменен между двумя точками последовательности.

Но как насчет следующих кодов?

i = 0, ++i;
i = (0, ++i);

Пока я знаю правила, я не могу прийти к выводу. Так определяется ли это поведение или нет?

edit: Точно так же, как @paxdiablo упоминает, определяется или нет, это действительно плохая практика, которой следует избегать. Этот вопрос задается исключительно для образовательных целей и лучшего понимания "правил".

4b9b3361

Ответ 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 См. расширенное обсуждение для аналогичного выражения.Суб >