2

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

4

2 回答 2

6

遗留的东西,可以在 中找到,这是放入命名空间<cmath>的 C 标准库。C 没有本机类型。1<math.h>stdbool

虽然这些确实是 C++11 的新增内容,但它们本质上是在引入<math.h>C99 中添加的内容。


1.对于那些要抱怨的人来说,C99bool实际上是一个宏。有一个_Bool,但我猜 C99 作者选择不将它用于isnan 等人。为了保持与<math.h>.

于 2012-07-13T19:38:58.537 回答
0

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

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

C99 C++11

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

于 2019-02-19T07:28:10.410 回答