Безопасная оценка короткого замыкания в C ++ 11

До C ++ 11 мы знаем, что для оператора требуется короткое замыкание и порядок оценки && потому что:

1.9.18

При оценке следующих выражений

a && b
a || b
a ? b : c
a , b

используя встроенное значение операторов в этих выражениях, после оценки первого выражения есть точка последовательности (12).

Но точки последовательности больше не существуют в C ++ 11, так что где стандартная часть, которая говорит:

if (ptr && ptr->do_something())
{
}

безопасно?

7

Решение

[Expr.log.and]

&& оператор группы слева направо. Оба операнда контекстуально преобразуются в bool (Пункт 4).
Результат равен true, если оба операнда имеют значение true, в противном случае — false. В отличие от &, && гарантирует слева направо
оценка: второй операнд не оценивается, если первый операнд является ложным.

Результатом является bool, Если второе выражение оценивается, каждое вычисление значения и связанный побочный эффект
с первым выражением последовательности перед каждым вычислением значения и побочным эффектом, связанным с
Второе выражение.

14

Другие решения


По вопросам рекламы [email protected]