Внутри цикл Whio While, последнее отделение запятой, гарантированное последним?
-
28-09-2019 - |
Вопрос
Рассмотрим следующий (тривиальный) сегмент кода:
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
}
Это будет читать целое число, пока мы не читаем ноль.