C++ 如果第一个表达式为false,那么假设逻辑and运算符不会计算第二个表达式是否总是正确的?

C++ 如果第一个表达式为false,那么假设逻辑and运算符不会计算第二个表达式是否总是正确的?,c++,logical-operators,C++,Logical Operators,那么,上述代码是否总是等同于以下代码 int* ptr; //ptr may points to any location(e.g. nullptr) if(ptr != nullptr && *ptr != 1) { //A } else { //B } 我想知道这个规则是标准还是实现,是第一个代码便携的?< / P>是的,它保证是短路。是的,C++标准保证逻辑运算符对整数类型进行短路。你当然可以在谷歌上搜索到。奇怪的是,昨天有一个问题。值得指出的是,重载版本不会短路

那么,上述代码是否总是等同于以下代码

int* ptr;
//ptr may points to any location(e.g. nullptr)
if(ptr != nullptr && *ptr != 1) {
  //A
} else {
  //B
}

我想知道这个规则是标准还是实现,是第一个代码便携的?< / P>是的,它保证是短路。是的,C++标准保证逻辑运算符对整数类型进行短路。你当然可以在谷歌上搜索到。奇怪的是,昨天有一个问题。值得指出的是,重载版本不会短路,会引入意外的语义,所以通常重载是个坏主意。谢谢,我没有想到“短路”这个词。

if(ptr != nullptr) {
  if(*ptr != 1) {
    //A
  } else {
    //B
  }
} else {
  //B
}