std :: numeric_limits :: quiet_NaN()与std :: nan()vs. NAN

Mik*_*ail 11 floating-point nan cmath c++11

我很惊讶表示安静的NaN值的C++工具的数量.我发现了三种标准方式:

  1. std::numeric_limits<T>::quiet_NaN() - 通用,我认为这是被选中的
  2. std::nan,std::nanf,std::nanl-家庭的接收功能const char*参数
  3. NAN - 一个宏,"评估为一个安静的非数字"

其中每一个都是在C++ 11中引入的.我有几个问题:

  1. const char*争论代表什么std::nan和合作?如何使用?
  2. 为什么我们需要在C++ 11中添加,而我们已经为此目的添加了一个通用特征类?(是否与C兼容?)
  3. 我应该默认使用的是什么?(我想这是第一次)

ein*_*ica 11

std::nan,std::nanlstd::nanf 继承自C Math库 ; NAN宏也是如此.他们都住在C的<math.h>.然而,正如@NicolBolas所暗示的那样,它们只是在C++ 11中引入,因为它们不是ANSI C的一部分,而是C99,C语言标准的新版本.C++标准委员会正在努力"更新"C兼容性,可以这么说.

std::numeric_limits<T> 是为C++本身设计的(早在C++ 11之前),这就是我所使用的.

所以,底线答案是:C99兼容性.