等于equal是false的C ++规则是什么?鉴于:
float f {-1.0};
bool equal = (static_cast<unsigned>(f) == static_cast<unsigned>(-1.0));
Run Code Online (Sandbox Code Playgroud)
例如https://godbolt.org/z/fcmx2P
#include <iostream>
int main()
{
float f {-1.0};
const float cf {-1.0};
std::cout << std::hex;
std::cout << " f" << "=" << static_cast<unsigned>(f) << '\n';
std::cout << "cf" << "=" << static_cast<unsigned>(cf) << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
f=ffffffff
cf=0
Run Code Online (Sandbox Code Playgroud)
Bat*_*eba 23
程序的行为是不确定的:C ++标准未定义负浮点类型到unsigned
类型的转换。
(请注意,熟悉的环绕行为仅适用于负整数类型。)
因此,尝试解释程序输出毫无意义。