До C ++ 11 мы знаем, что для оператора требуется короткое замыкание и порядок оценки &&
потому что:
1.9.18
При оценке следующих выражений
a && b a || b a ? b : c a , b
используя встроенное значение операторов в этих выражениях, после оценки первого выражения есть точка последовательности (12).
Но точки последовательности больше не существуют в C ++ 11, так что где стандартная часть, которая говорит:
if (ptr && ptr->do_something())
{
}
безопасно?
&&
оператор группы слева направо. Оба операнда контекстуально преобразуются вbool
(Пункт 4).
Результат равен true, если оба операнда имеют значение true, в противном случае — false. В отличие от&
,&&
гарантирует слева направо
оценка: второй операнд не оценивается, если первый операнд является ложным.Результатом является
bool
, Если второе выражение оценивается, каждое вычисление значения и связанный побочный эффект
с первым выражением последовательности перед каждым вычислением значения и побочным эффектом, связанным с
Второе выражение.