gpt4 book ai didi

c++ - 不同类型和不同编译器的 std::isinf 的不同结果

转载 作者:行者123 更新时间:2023-12-05 03:17:03 32 4
gpt4 key购买 nike

使用 MSVC(v19.33) 编译,这不会编译(C2668 对重载函数的模糊调用):

std::cout << std::isinf(0) << std::endl;

但是这样编译:

std::cout << std::isinf(0.0) << std::endl;

然而,在cppreference.com ,它说:

  1. A set of overloads or a function template accepting the arg argument of any integral type. Equivalent to (2) (the argument is cast to double).

似乎该函数自 C++11 以来就存在于标准中。

如果我没理解错的话,第一个代码应该等同于第二个,不是吗?这是否意味着 MSVC 尚未实现重载函数,还是我遗漏了什么?

(相比之下,如果我使用 gcc 或 clang,上述示例编译没有问题)。

最佳答案

在微软的实现中,isinf的定义如下(复制自here):

template <class _Ty>
_Check_return_ inline bool isinf(_In_ _Ty _X) throw()
{
return fpclassify(_X) == FP_INFINITE;
}

Microsoft 的 fpclassify 的问题是缺少整数类型的重载。有关详细信息,请参阅:

'fpclassify': ambiguous call to overloaded function .

我同意 MSVC 在这里错误的观点(但是,他们似乎并不关心)。

关于c++ - 不同类型和不同编译器的 std::isinf 的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74357742/

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