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
可以返回true
或false
。 下一部分有效地变为true > 1
或false > 1
。
给定隐式布尔到int的转换 ,有两种可能性:A) 4 > y
返回true
。 true
评估为1
。 1 > 1
评估为错误。 B) 4 > y
返回false
。 false
评估为0
。 0 > 1
评估为错误。
无论如何,这个表达方式会被评估为错误的。
重写的解释
我假设你打算((4 > y) && (y > 1))
。
例
(4 > y > 1)
不等于(4 > y && y > 1)
。
逻辑运算符
逻辑运算符( !
, &&
, ||
)使用短路逻辑。
给定a && b
, a
将被评估。 如果a
评估为真,则b
将被评估。 否则, b
将不会被评估 。 至于a || b
a || b
,短路逻辑反向工作。 a
将被评估。 由于表达式a
首先被评估,如果它是假的,整个表达式不可能评估为真。
给定a || b
a || b
, a
将被评估。 如果评估结果为false,则评估b
。 否则, b
将不会被评估 。 由于首先评估表达式a
,如果是,那么整个表达式就不可能评估为假。
链接运营商是运营商的优先事项。 最好使用括号,而不要冒错误行为的风险。