c++ - 如何评估 'if (A && B)' 语句?

标签 c++

if( (A) && (B) )
{
  //do something
}
else
  //do something else

问题是,如果 A 为 FALSE,该语句是否会立即中断。 B甚至会被评估吗?

如果 B 检查数组索引的有效性,当数组实际上为空且元素为零时,我会问这个问题。因此抛出一个段错误,因为我们试图访问超出数组范围的东西。具体

if( (array.GetElements() > 0) && (array[0]))
  array[0]->doSomething();
else
  //do nothing and return

如果 array[0] 实际被评估,这可能是危险的,因为它在没有第一次检查 '&&' 左侧的情况下出现段错误。 Precedence 告诉我左侧肯定会优先,但它并没有告诉我如果左侧为 FALSE,它将不会评估右侧。

最佳答案

在 C 和 C++ 中,&&|| 运算符“短路”。这意味着他们只在需要时评估一个参数。如果 && 的第一个参数为 false,或 || 的第一个参数为 true,则不会计算其余参数。

您发布的代码是安全的,但我质疑您为什么要包含一个空的 else block 。

关于c++ - 如何评估 'if (A && B)' 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1331318/

相关文章:

c++ - QSqlQuery 为列名 Sqlite 准备和绑定(bind)值

c++ - 比较两个密码以在 C++ 中进行验证

c++ - 搜索有关如何在 C++ 中实现不可变数据结构的提示

c++ - 未定义的类型特征引用

c++ - 未在排序中使用的对上的重载运算符<

java - Java 中是否有等同于 C++ 成员函数指针的东西?

c++ - 转换 Eigen 矩阵类型时,错误 : expected primary-expression before ‘float’

c++ - 标识符 "__readgsqword"未定义 - Visual Studio 2017

c++ - 读取位性能

C++ istringstream 基于范围的 for 循环没有 begin 成员