gpt4 book ai didi

c++ - 是否将无穷大转换为整数未定义?

转载 作者:行者123 更新时间:2023-12-02 10:34:22 31 4
gpt4 key购买 nike

将无穷大(由float表示)强制转换为整数是 undefined 的行为吗?

该标准说:

4.10 Floating-integral conversions

A prvalue of a floating point type can be converted to a prvalue of an integer type. The conversion truncates; that is, the fractional part is discarded. The behavior is undefined if the truncated value cannot be represented in the destination type.



但我无法确定“无法表示截断的值”是否包含无穷大。

我试图了解为什么 std::numeric_limits<int>::infinity()static_cast<int>(std::numeric_limits<float>::infinity() )具有不同的结果。
#include <iostream>
#include <limits>

int main ()
{
std::cout << std::numeric_limits<int>::infinity () << std::endl;
std::cout << static_cast<int> (std::numeric_limits<float>::infinity () ) << std::endl;
return 0;
}

输出:
0  
-2147483648
std::numeric_limits<int>::infinity() is well defined的结果,等于 0,但是我找不到有关强制转换无穷大的任何信息。

最佳答案

你说

I can't tell whether "truncated value cannot be represented" covers infinity



但这归结为

What is the result of truncating infinity.



C标准(通过26.9并入C++)很清楚地回答了这一问题:

C standard semantics for <code>trunc</code>

由于无穷大的截断仍然是无穷大,并且无穷大不能用 int表示(我希望这部分没有问题),所以行为是不确定的。

关于c++ - 是否将无穷大转换为整数未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60982340/

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