Ситуация: проверка состояния в C ++ или C # по многим критериям:
if (condition1 && condition2 && condition3)
{
// Do something
}
Я всегда считал, что последовательность выполнения этих проверок не гарантируется. Таким образом, это не обязательно сначала условие 1, затем условие 2 и только затем условие 3. Я узнал это в свое время с C ++. Я думаю, что мне сказали это или где-то читали.
До тех пор, пока не узнаете, что я всегда писал безопасный код для учета возможных нулевых указателей в следующей ситуации:
if ((object != null) && (object.SomeFunc() != value))
{
// A bad way of checking (or so I thought)
}
Итак, я писал:
if (object != null)
{
if (object.SomeFunc() != value)
{
// A much better and safer way
}
}
Поскольку я не был уверен, что проверка not-null будет выполняться первой и только тогда будет вызываться метод экземпляра для выполнения второй проверки.
Теперь наши величайшие умы сообщества говорят мне, что последовательность выполнения этих проверок гарантированно будет выполняться в порядке слева направо.
Я очень удивлен. Это действительно так для языков C ++ и C #?
Кто-нибудь еще слышал версию, которую я слышал раньше?