gpt4 book ai didi

c++ - 这个条件是如何被解析的?

转载 作者:行者123 更新时间:2023-11-30 00:43:55 26 4
gpt4 key购买 nike

由于我自己的错误,我真的很笨拙并遇到了一个错误。基本上:

#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 < b) 它会起作用。所以我知道我需要括号。

我的问题是我的错误示​​例是如何解析的?

if (!a < b)

a有float值4.f,是否将4.f由float值转为boolean值,为true,然后取反为false,再将false的boolean值与b比较,为6.f漂浮?将假 bool 值与浮点值 6.f 进行比较会怎样?如果它将 6.f float 转换为 bool 值,则 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

最佳答案

如果您检查 operator precedence , 你可以看到 !(Logical NOT)会先求值,所以

!a < b将被解析为 (!a) < b

a != 0 , (!a) => false

变成false < b0 < b 相同

关于c++ - 这个条件是如何被解析的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51682271/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com