代码之家  ›  专栏  ›  技术社区  ›  levzettelin

创建包含char序列的nan时,如何获取char序列?

  •  3
  • levzettelin  · 技术社区  · 6 年前

    const double d = std::nan ("Hello");
    

    你得到一个包含字符串“Hello”的NAN。如何从变量中返回此字符串 d

    2 回复  |  直到 6 年前
        1
  •  3
  •   Eric Postpischil    6 年前

    C++标准称,一个实现可以在编码它时将显示在NANI中编码的数据。 fprintf ,其亲属如 printf 以及由继承的C++特性 ,例如输出流格式化程序。这是C++中唯一一个获取关于在NA中的数据的信息的明确规定。(我包括C标准中的语句,C++引用了它)。 可以 在格式化NaN时包含编码的数据,但它是以实现定义的方式进行的,并且实现可能会忽略这一点。

    nan 函数被处理是实现定义的。一个实现可以选择对它们不做任何处理,它可以按字面意思将它们包括在NaN的字节中(如果它们合适的话),或者它可以对它们进行编码或解释,例如在字符串中期望十六进制数字,该数字将被编码成NaN的位。IEEE-754基本64位二进制浮点格式常用于 double 有51位可用于安静NaN的有效负载,这足以修复6个8位字符,因此字符串Hello 用NaN编码。

    以下是标准对 功能:

    • C++继承了
    • C说 nan("n-char-sequence") 相当于 strtod("NAN(n-char-sequence)", (char**)NULL)
    • C说 n-字符序列 数字 非数字 人物。这个 数字 非数字 字符是,A-Z和A-Z "Hello" 是一个 .
    • C说,关于 strtod 如果n an带有一个*n-char序列,则 是实现定义的。

    所以,一个实现 可以

    C标准(和C++继承)关于格式化一个Na的说明是:

    • 表示 NaN 转换为[-]nan或[-]nan样式之一( n-字符序列
        2
  •  0
  •   Marek R    6 年前

    这完全是误会什么 std::nan documentation .

    调用std::n a n(“n-char-sequence”),其中n-char-sequence是 数字、拉丁字母和下划线的序列相当于

    基本上“非数”可以用成对不同的安静NAN表示无效浮点。 标准::南
    所以它不会“包装”任何类型的字符串,只要字符串应该表示一个数字,否则您将收到NAN的常规表示。使用“hello”是没有意义的,字符串值不能从 d .

    std::invalid_argument .
    我没有一个例子,在那里风俗习惯可以很有用,也许其他人可以。