是否可以使用c ++ &&(AND)运算符进行排序

时间:2018-12-20 11:46:37

标签: c++

a-检查是否为功能b定义了输入

if (a) {
    if (b) {
        /* ... */
    }
}

显然有效。 &&运算符是否总是检查第一个输入?

if (a && b) {
    /* ... */
}

这是否可能导致b函数的不确定行为?

3 个答案:

答案 0 :(得分:2)

是的,内置&&短路。

因此,如果a为假,将不评估b。除非有operator&&(type of a, type of b)的过载,否则这是可以保证的。

答案 1 :(得分:0)

在表达式a && b中,假设&&是内置运算符,而不是重载运算符,则b仅在{{1} }的值为a

这就是为什么您可以编写诸如true之类的东西的原因。

我们将此称为短路if (a != nullptr && *a)也具有该属性。

答案 2 :(得分:0)

正如Bathsheba所说,如果您的代码是

if (a && b) {
    //...
}

然后,仅当结果为true时才检查b。 这是因为&&运算符是所谓的快捷键运算符。 逻辑或(||)也是如此。

if (a || b)//...

但是,在这种情况下,仅当结果为假时才对b求值。

请勿将这些与按位运算符(&和|)混淆,后者会同时检查两个值。