3 回答
![?](http://img1.sycdn.imooc.com/545865470001bf9402200220-100-100.jpg)
TA贡献2016条经验 获得超9个赞
该语句(4 > y > 1)
被解析为:
((4 > y) > 1)
比较运算符<
并>
从左到右进行评估。
在4 > y
返回或者0
还是1
取决于如果它是真的还是假的。
然后将结果与1进行比较。
在这种情况下,由于0
或1
永远不会超过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;}
![?](http://img1.sycdn.imooc.com/54584e1f0001bec502200220-100-100.jpg)
TA贡献1877条经验 获得超1个赞
表达有效性
是的,它是一个有效的表达式,假设y是,或者可以隐式转换为整数。如果不是并且>
操作员超负荷,那么这个问题范围之外的情况就不同了。
它将从左到右进行评估((4 > y) > 1)
。
假设y
是一个整数,让我们考虑两种可能性。4 > y
可以回来true
或false
。下一部分有效地成为true > 1
或false > 1
。
给定隐式bool到int转换,有两种可能性:A)4 > y
返回true
。true
评估为1
。1 > 1
评估为假。B)4 > y
退货false
。false
评估为0
。0 > 1
评估为假。
无论如何,表达式将评估为false。
重写口译
我假设你想要的是什么((4 > y) && (y > 1))
。
例
(4 > y > 1)
是不一样的(4 > y && y > 1)
。
逻辑运算符
的逻辑运算符(!
,&&
,||
)使用短路逻辑。
鉴于a && b
,a
将予以评估。如果a
计算结果为true,b
则将进行评估。否则,b
将不予评估。至于a || b
,短路逻辑是相反的。a
将被评估。由于a
首先计算表达式,如果表达式为false,则整个表达式不可能评估为true。
鉴于a || b
,a
将予以评估。如果a
计算结果为false,b
则将进行评估。否则,b
将不予评估。由于a
首先计算表达式,如果为真,则整个表达式不可能评估为false。
链接运算符是运算符优先级的问题。最好使用括号并明确而不是冒错误行为。
![?](http://img1.sycdn.imooc.com/5333a0350001692e02200220-100-100.jpg)
TA贡献2012条经验 获得超12个赞
我认为这是一个有效的表达(不是声明),但可能不会做你想要的。它从左到右评估为(4 > y) > 1
。测试4 > y
将评估为0(假)或1(真),并且整个表达式将始终评估为0(假)。
- 3 回答
- 0 关注
- 400 浏览
添加回答
举报