为什么isnan,isinf和isfinite返回int而不是bool?

时间:2012-07-13 19:37:23

标签: c++ floating-point c++11 nan infinite

isnan返回一个int ... nonzero value if arg is NaN, ​0​ otherwise。为什么不回归布尔?这不是一些传统的东西,它是C ++ 11的新功能。

2 个答案:

答案 0 :(得分:5)

遗留内容,这些内容可以在<cmath>中找到,这是放入<math.h>命名空间的C标准库std。 C没有原生bool类型。 1

虽然这些都是C ++ 11的添加,但它们实际上是在C99中添加到<math.h>的内容。

<小时/> <子> 1。对于那些即将抱怨的人来说,C99的bool实际上是一个宏。有一个_Bool,但我想C99作者选择不将其用于isnan ,以保持与<math.h>中其他内容的一致性

答案 1 :(得分:0)

为澄清起见,在C99中将isnan,isinf作为宏添加为int表达式。因此,为了实现C兼容性,将它们添加为返回int的函数是很有意义的。

http://www.cplusplus.com/reference/cmath/isnan/

  

C99 C ++ 11

     

在C中,这被实现为返回int值的宏。的   x的类型应为float,double或long double