В выражении (i, ++i, 1)
запятая используется оператор запятой
оператор запятой (представленный токеном ,
) является бинарным оператором, который оценивает свой первый операнд и отбрасывает результат, а затем оценивает второй операнд и возвращает это значение (и тип).
Поскольку он отбрасывает свой первый операнд, он обычно полезен только тогда, когда первый операнд имеет желательные побочные эффекты . Если побочный эффект первого операнда не имеет места, тогда компилятор может сгенерировать предупреждение о выражении без эффекта.
Таким образом, в приведенном выше выражении i
будет оцениваться крайнее левое значение, а его значение будет отброшено. Затем ++i
будет оцениваться и будет увеличиваться i
на 1, и снова значение выражения ++i
будет отброшено, но побочный эффект i
является постоянным . Тогда 1
будет оцениваться и значение выражения будет 1
.
Это эквивалентно
i; // Evaluate i and discard its value. This has no effect.
++i; // Evaluate i and increment it by 1 and discard the value of expression ++i
i = 1 + 1;
Обратите внимание, что вышеприведенное выражение является совершенно допустимым и не вызывает неопределенного поведения, потому что существует точка последовательности между вычислением левого и правого операндов оператора запятой.