int n = 5;
if(2<=n<=20)
{
cout << "hello";
}在上面的代码中,它不给出错误,它成功地运行并将"hello“作为输出。
但是我们必须在这种方程中使用&&。
有人能解释一下吗?
发布于 2019-04-04 09:46:43
<=在C++中是左联想的,因此表示被解析为((2 <= n) <= 20).2 <= n是bool类型,它可以隐式转换为int:true转换为1,false转换为0。
这两种情况都是<= 20,因此条件实际上总是正确的。
请注意,上面的假设是n是int或其他原始数值类型。如果n是具有operator <=重载的用户定义类,则关联位仍然为真,但基于重载运算符的返回类型和语义,关于隐式转换的部分可能适用,也可能不适用。
发布于 2019-04-04 09:49:06
2<=n<=20将以(2<=n)<=20的形式执行。
2<=n会产生0或1,这取决于n的值。
0<=20和1<=20是真,因此将执行cout,而不依赖于n的值和类型。
n可以是带有重载运算符的类的对象,其中2<=n结果为某物(对象为类或值为>21),这与<=20结果对应为false。在这种情况下,将没有输出。
发布于 2019-04-04 09:47:34
首先对第一个比较2 <= n进行评估。这将返回true,它可以转换为int。来自conv.integral#2
如果源类型为
bool,则将值false转换为零,将值true转换为1。
一旦true被转换为1或0,下一个比较就是1 <= 20或0 <= 20,它总是正确的。因此输出。
https://stackoverflow.com/questions/55512763
复制相似问题