Внутри цикл Whio While, последнее отделение запятой, гарантированное последним?

StackOverflow https://stackoverflow.com/questions/4072578

Вопрос

Рассмотрим следующий (тривиальный) сегмент кода:

while (i++, i <= 10) {
  // some more code
}

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

Это было полезно?

Решение

В общем случае C ++ позволяет оценивать операторы разделения запятыми в любом порядке.

Если вы имеете в виду запятые между аргументами функций, это просто сепаратор.

В вашем случае вы используете Оператор запятой, И это представляет точку последовательности, которая гарантирует, что все побочные эффекты со стороны левого операнда запяты оселились до оценки правильного.

Так что да, это четко определено.

Из раздела 5.18 / 1 стандарта ISO C ++ 98:

Пара выражений, разделенных запятой, оценивается слева направо, и значение левого выражения отбрасывается. Lvalue-to-rvalue (4.1), массив к указателю (4.2) и функционально-указателю (4.3) стандартные преобразования не применяются к левому выражению. Все побочные эффекты (1.9) левого выражения, за исключением уничтожения временных (12.2), выполняются до оценки правильного выражения. Тип и значение результата являются тип и значение правого операнда; Результатом является Lvalue, если его правый операнд.

Другие советы

да. То , оператор (если не перегружено!) вводит так называемый точка последовательности И действительно ли гарантирует порядок исполнения слева направо.

Вышеуказанные комментарии объяснили это. И один из распространенных способов употребления этого метода

while(scanf("%d", &n), n){
    // do something
}

Это будет читать целое число, пока мы не читаем ноль.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top