【发布时间】:2012-07-13 16:50:35
【问题描述】:
isnan 返回一个整数...nonzero value if arg is NaN, 0 otherwise。为什么它不返回一个布尔值?这不是一些遗留的东西,它是 C++11 的新东西。
【问题讨论】:
-
可能是因为这来自 C 没有 boolean 类型的日子...
标签: c++ floating-point c++11 nan infinite
isnan 返回一个整数...nonzero value if arg is NaN, 0 otherwise。为什么它不返回一个布尔值?这不是一些遗留的东西,它是 C++11 的新东西。
【问题讨论】:
标签: c++ floating-point c++11 nan infinite
为了澄清,isnan、isinf 在 C99 中作为宏添加为 int 表达式。因此,为了 C 兼容性,将它们添加为返回 int 的函数是有意义的。
http://www.cplusplus.com/reference/cmath/isnan/
C99 C++11
在 C 中,这被实现为一个返回 int 值的宏。这 x 的类型应为 float、double 或 long double
【讨论】:
它是遗留的东西,这些都可以在<cmath> 中找到,这是放在std 命名空间中的C 标准库<math.h>。 C 没有原生的 bool 类型。1
虽然这些确实是 C++11 的添加,但它们本质上是在提取 C99 中添加到 <math.h> 的内容。
bool 实际上是一个宏。有一个 _Bool,但我猜 C99 作者选择不将它用于 isnanet al.,以便与 <math.h> 中的其他内容保持一致。
【讨论】:
bool 类型的说法。我同意,C99 的 isnan 可能可以被定义为返回 _Bool,但这将是关于 C 的问题的讨论......