提问人:trusktr 提问时间:1/17/2012 最后编辑:Niall C.trusktr 更新时间:3/10/2018 访问量:5215
(4 > y > 1) 是 C++ 中的有效语句吗?如果是这样,您如何评估它?
Is (4 > y > 1) a valid statement in C++? How do you evaluate it if so?
答:
4 > y 的计算结果为 true 或 false。然后,表达式的其余部分本质上是 [true|false] > 1,这没有意义。
评论
true
false
该语句解析如下:(4 > y > 1)
((4 > y) > 1)
比较运算符并按从左到右计算。<
>
返回要么,要么取决于它是否正确。4 > y
0
1
然后将结果与 1 进行比较。
在这种情况下,由于 or 从不大于 ,整个语句将始终返回 false。0
1
1
但有一个例外:
if 是一个类,并且运算符已重载以执行异常操作。然后什么都去。y
>
例如,这将无法编译:
class mytype{
};
mytype operator>(int x,const mytype &y){
return mytype();
}
int main(){
mytype y;
cout << (4 > y > 1) << endl;
return 0;
}
评论
4 > y
false
true
0
1
operator>(operator>(4, y), 1)
我认为这是一个有效的表达式(不是语句),但可能不会做你想做的事。它从左到右计算,如 .测试的计算结果为 0 (false) 或 1 (true),整个表达式的计算结果始终为 0 (false)。(4 > y) > 1
4 > y
表达式有效性
是的,它是一个有效的表达式,假设 y 是或可以隐式转换为整数。如果不是,并且操作员过载,则在此问题的范围之外是另一回事。>
它将从左到右计算为 。((4 > y) > 1)
假设是一个整数,让我们考虑两种可能性。 可以返回或 .下一部分实际上变为 或 。y
4 > y
true
false
true > 1
false > 1
给定隐式 bool 到 int 的转换,有两种可能性:
A) 返回 . 计算结果为 。 计算结果为 false。
B) 返回 。 计算结果为 。 计算结果为 false。4 > y
true
true
1
1 > 1
4 > y
false
false
0
0 > 1
无论如何,表达式的计算结果都将为 false。
重写的解释
我假设你的意图是.((4 > y) && (y > 1))
例
(4 > y > 1)
与 不同。(4 > y && y > 1)
逻辑运算符
逻辑运算符 (, , ) 使用短路逻辑。!
&&
||
给定 ,将被评估。如果计算结果为 true,则将进行计算。否则,将不计算 b
。至于,短路逻辑则相反。 将进行评估。由于表达式是首先计算的,因此如果它为 false,则整个表达式不可能计算为 true。a && b
a
a
b
a || b
a
a
给定 ,将被评估。如果计算结果为 false,则将进行计算。否则,将不计算 b
。由于表达式是首先计算的,因此如果它为 true,则整个表达式不可能计算为 false。a || b
a
a
b
a
链接运算符是运算符优先级的问题。最好使用括号并清晰,而不是冒着错误行为的风险。
4 > y > 1 --> MAY BE ANYWAY IF Y - IS CLASS!.
#include <iostream>
#include <string>
struct num{ int n; };
struct op{ bool v; struct num n; };
struct op operator > (int x, num n){
struct op o = { x > n.n, n };
return o;
}
bool operator > (struct op o, int x)
{
return o.v && o.n.n > x;
}
int main()
{
struct num y = { 2 } ;
if ( 4 > y > 1 ) { std::cout << "4 > y > 1 TRUE" << std::endl; }
else { std::cout << "4 > y > 1 ALWAYS FALSE" << std::endl; }
}
评论