【问题标题】:Overloads of std::isnan and std::isinf for integral types整数类型的 std::isnan 和 std::isinf 重载
【发布时间】:2019-10-14 21:16:36
【问题描述】:
【问题讨论】:
标签:
c++
c++11
language-lawyer
【解决方案1】:
标准页末尾有一段cmath:
对于<cmath> 中的每一组重载函数,除了abs,应该有足够的额外重载来确保:
2. 否则,如果任何与 double 形参对应的算术类型实参具有 double 类型或整数类型,则所有与 double 形参对应的算术类型实参都被有效地强制转换为 double。
整数重载是强制性的,否则您会在三个浮点重载之间得到模棱两可的调用,但未指定如何实现此类重载。
请注意,<cmath> 标头中的其他函数具有正确的整数类型重载,例如,
std::atan(1)
调用模板化版本double atan<int,void>(int)。
【解决方案2】:
这是概要,还有footnote
对于 中的每组重载函数,除了 abs 之外,应该有足够的额外重载来确保:
...
- 否则,如果与 double 形参对应的算术类型的任何实参具有 double 类型或整数类型,则与 double 形参对应的所有算术类型实参都将有效地转换为 double。
对应bool isnan( IntegralType arg )描述
一组重载或接受任何整数类型的 arg 参数的函数模板。等价于 (2)(参数被强制转换为 double)。