【发布时间】:2019-01-11 21:59:50
【问题描述】:
我真的很笨拙,由于我自己的错而遇到了错误。基本上:
#include <iostream>
float a = 4.f;
float b = 6.f;
int main()
{
if (!a < b)
{
std::cout << "a is not less than b";
}
else std::cout << "a is less than b";
std::cin.ignore();
return 0;
}
所以这个条件 if 语句总是计算为真。如果我将它用括号括起来 !(a
我的问题是我的错误示例是如何解析的?
if (!a < b)
a有float值4.f,是否将4.f从float值转为boolean值,即为真,再取反为假,再将假的boolean值与b比较,即6.f漂浮?它将如何将错误的布尔值与浮点值 6.f 进行比较?如果它将 6.f 浮点数转换为布尔值,则 6.f 将变为 true,并且语句将为 if (false < true),这没有意义。这是它的工作方式吗?
我不确定它是否转向if (false < true),因为:
float a = 4.f;
float b = -50.f;
int main()
{
if (!a < b)
{
std::cout << "a is not less than b";
}
else std::cout << "a is less than b";
std::cin.ignore();
return 0;
}
总是以错误告终。我认为应该将 -50.f 设置为 true。另一方面,如果我分配给中间变量,情况就不同了:
float a = 4.f;
float b = -50.f;
int main()
{
bool temp = b;
if (!a < temp)
{
std::cout << "a is not less than b";
}
else std::cout << "a is less than b";
std::cin.ignore();
return 0;
}
现在总是如此。
感谢用户 apple apple 解决了这个问题,结果解析如下:
if (!a < b)
if (!4.f < 6.f) // Changes 4.f float to false boolean
if (false < 6.f)
if (0.f < 6.f) // Promotes false boolean to 0.f
【问题讨论】:
-
@ShafikYaghmour 谢谢,现在阅读。这就是正在发生的事情吗?到底是不是变成了if(false
-
operator precedence 也可能有帮助
-
我认为是
(!a) < b=>false < 6.f=>0 < 6.f -
@apple apple 我认为您是对的,并且与我给出的进一步示例一致。因此它将第一个浮点数转换为布尔类型,然后当它与浮点数进行比较时,它将布尔值提升为浮点数,这意味着它变为零。很有趣。
标签: c++ conditional