C++11 标准::数值限制::安静\u NaN()与标准::NaN()与NaN 我惊讶于C++设备的数量代表安静的Na值。我找到了三种标准方法: std::numeric\u limits::quiet\u NaN()-泛型,我认为它是被选中的 std::nan,std::nanf,std::nanl-接受const char*参数的函数系列 NAN-一个宏,“它的计算结果是一个安静的非数字”

C++11 标准::数值限制::安静\u NaN()与标准::NaN()与NaN 我惊讶于C++设备的数量代表安静的Na值。我找到了三种标准方法: std::numeric\u limits::quiet\u NaN()-泛型,我认为它是被选中的 std::nan,std::nanf,std::nanl-接受const char*参数的函数系列 NAN-一个宏,“它的计算结果是一个安静的非数字”,c++11,floating-point,nan,cmath,C++11,Floating Point,Nan,Cmath,这些都是在C++11中介绍的。关于这一点,我有几个问题: const char*参数在std::nan和co中代表什么?它是如何使用的 为什么我们需要在C++11中添加一个宏,而我们已经为此添加了一个泛型trait类?(是否与C兼容?) 默认情况下我应该使用什么?(我想这是第一次) std::nan,std::nanl和std::nanf;这一点也很重要。他们都住在C区。然而,正如@NicolBolas所建议的,它们只是在C++11中引入的,因为它们不是ANSI C的一部分,而是C语言标准的更新

这些都是在C++11中介绍的。关于这一点,我有几个问题:

  • const char*
    参数在
    std::nan
    和co中代表什么?它是如何使用的
  • 为什么我们需要在C++11中添加一个宏,而我们已经为此添加了一个泛型trait类?(是否与C兼容?)
  • 默认情况下我应该使用什么?(我想这是第一次)

  • std::nan
    std::nanl
    std::nanf
    ;这一点也很重要。他们都住在C区。然而,正如@NicolBolas所建议的,它们只是在C++11中引入的,因为它们不是ANSI C的一部分,而是C语言标准的更新版本C99的一部分。可以说,C++标准委员会正在努力更新C兼容性。

    是为C++本身设计的(在C++ 11之前),这就是我要使用的。


    因此,最基本的答案是:C99兼容性。

    字符用于指定所需的Nan。。解释未指定(iirc),但在我的linux机器上,字节用于初始化Nan“有效负载”,主要用于帮助诊断特定Nan的来源。