Вопрос

Я в целом положительно отношусь к этому, но на всякий случай:

Гарантирует ли стандарт C, что цепочки AND (A && B && ...) будут оцениваться слева направо и что вычисление прекратится, как только появится 0?

Тот же вопрос по ОР.(Как только будет 1)

Могу ли я рассчитывать на это для других языков C-стиля?

Безопасен ли этот код:

if (somePtr!=NULL && somePtr->someMember==123)
{
     ...
}
Это было полезно?

Решение

Да, это гарантировано для C, C++ и C#.То же самое касается Delphi с включенной «оценкой короткого замыкания».

Это поведение, на которое на данный момент полагаются многие строки кода.

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

Да, он стандартизирован как C, так и C++.

Да, ваши предположения о порядке операций в C верны, и фрагмент кода будет работать так, как задумано.Другие языки «C-стиля» я бы рассматривал в каждом конкретном случае.

Да, это так.

Я видел людей, которые думали, что это неясно, и заменяли && на эту форму:

if (a)
if (b)
if (c)
if (d) {
}

Лично я считаю, что это как-то некрасиво.

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