C ++ 11中的安全短路评估

时间:2014-11-15 05:42:05

标签: c++ c++11 short-circuiting sequence-points

Pre-C ++ 11我们知道运营商&&需要短路和评估顺序,因为:

  

1.9.18

     

评估以下表达式

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

使用这些表达式中运算符的内置含义,在评估第一个表达式后有一个序列点(12)。

但是C ++ 11中不再存在序列点,所以标准部分在哪里说:

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

安全吗?

1 个答案:

答案 0 :(得分:14)

[expr.log.and]

  

&&运算符组从左到右。操作数都在上下文中转换为bool(第4条)。   如果两个操作数都为真,则结果为true,否则为false。与&不同,&&保证从左到右   评估:如果第一个操作数为false,则不评估第二个操作数。

     

结果是bool。如果计算第二个表达式,则每个值计算和副作用相关联   第一个表达式在每个值计算和与之相关的副作用之前进行排序   第二个表达。