operator重载 - 是(4> y> 1)在C++中有效的语句? 你如何评价呢?




operator | c++ (3)

这是一个有效的表达? 如果是这样,你可以重写它,使它更有意义吗? 例如,是否与(4 > y && y > 1) ? 你如何评估链式逻辑运算符?


4> y将评估为true或false的布尔值。 表达式的其余部分基本上是[true | false]> 1,这是没有意义的。


我认为这是一个有效的声明,但可能不会做你想要的。 它从左到右评估为(4 > y) > 1 。 测试4 > y将评估为0(假)或1(真),整个表达式将始终评估为0(假)。


表达有效性

是的,这是一个有效的表达式,假设y是或可以隐式转换为整数。 如果不是,运算符超载,这个问题的范围之外的情况是不同的。

((4 > y) > 1)从左到右进行评估。

假设y是一个整数,让我们考虑两种可能性。 4 > y可以返回truefalse 。 下一部分有效地变为true > 1false > 1

给定隐式布尔到int的转换 ,有两种可能性:A) 4 > y返回truetrue评估为11 > 1评估为错误。 B) 4 > y返回falsefalse评估为00 > 1评估为错误。

无论如何,这个表达方式会被评估为错误的。

重写的解释

我假设你打算((4 > y) && (y > 1))

(4 > y > 1)不等于(4 > y && y > 1)

逻辑运算符

逻辑运算符( !&&|| )使用短路逻辑。

给定a && ba将被评估。 如果a评估为真,则b将被评估。 否则, b将不会被评估 。 至于a || b a || b ,短路逻辑反向工作。 a将被评估。 由于表达式a首先被评估,如果它是假的,整个表达式不可能评估为真。

给定a || b a || ba将被评估。 如果评估结果为false,则评估b否则, b将不会被评估 。 由于首先评估表达式a ,如果是,那么整个表达式就不可能评估为假。

链接运营商是运营商的优先事项。 最好使用括号,而不要冒错误行为的风险。





logical-operators