为了账号安全,请及时绑定邮箱和手机立即绑定

(4> y> 1)是C ++中的有效语句吗?如果是这样,你如何评价?

(4> y> 1)是C ++中的有效语句吗?如果是这样,你如何评价?

C++
斯蒂芬大帝 2019-08-23 10:09:47
(4> y> 1)是C ++中的有效语句吗?如果是这样,你如何评价?这是一个有效的表达吗?如果是这样,你能改写它以使它更有意义吗?例如,它是一样的(4 > y && y > 1)吗?您如何评估链式逻辑运算符?
查看完整描述

3 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

该语句(4 > y > 1)被解析为:

((4 > y) > 1)

比较运算符<> 从左到右进行评估

4 > y返回或者0还是1取决于如果它是真的还是假的。

然后将结果与1进行比较。

在这种情况下,由于01永远不会超过1整个语句将始终返回false


但有一个例外:

如果y是一个类,并且>操作符已经过载以执行异常操作。什么都行。

例如,这将无法编译:

class mytype{};mytype operator>(int x,const mytype &y){
    return mytype();}int main(){

    mytype y;

    cout << (4 > y > 1) << endl;

    return 0;}


查看完整回答
反对 回复 2019-08-23
?
冉冉说

TA贡献1877条经验 获得超1个赞

表达有效性

是的,它是一个有效的表达式,假设y是,或者可以隐式转换为整数。如果不是并且>操作员超负荷,那么这个问题范围之外的情况就不同了。

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

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

给定隐式bool到int转换,有两种可能性:A)4 > y返回truetrue评估为11 > 1评估为假。B)4 > y退货falsefalse评估为00 > 1评估为假。

无论如何,表达式将评估为false。

重写口译

我假设你想要的是什么((4 > y) && (y > 1))

(4 > y > 1)是不一样的(4 > y && y > 1)

逻辑运算符

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

鉴于a && ba将予以评估。如果a计算结果为true,b则将进行评估。否则,b将不予评估。至于a || b,短路逻辑是相反的。a将被评估。由于a首先计算表达式,如果表达式为false,则整个表达式不可能评估为true。

鉴于a || ba将予以评估。如果a计算结果为false,b则将进行评估。否则,b将不予评估。由于a首先计算表达式,如果为真,则整个表达式不可能评估为false。

链接运算符是运算符优先级的问题。最好使用括号并明确而不是冒错误行为。


查看完整回答
反对 回复 2019-08-23
?
繁花如伊

TA贡献2012条经验 获得超12个赞

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


查看完整回答
反对 回复 2019-08-23
  • 3 回答
  • 0 关注
  • 400 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信