为什么C ++标准没有提到__STDC_IEC_559__?

时间:2014-05-22 09:04:26

标签: c++ c++11

根据C ++ 11标准[c.math],<cmath>标题与标准C库标题<math.h>相同。
(当然,有几个区别,---命名空间,重载等---但这些可以在这里忽略。)
根据C99标准附件F,“定义__STDC_IEC_559__的实施应符合”附件F中的规范。

实施例。如果两个参数都为零,则atan2可能会导致域错误,但如果定义了__STDC_IEC_559__,则不能导致域错误。

在C99中,许多行为还取决于是否定义__STDC_IEC_559__

但是,在C ++ 11标准中似乎没有提到__STDC_IEC_559__ 如果是这样,C ++实现是否符合附件F中的规范?

我认为std::numeric_limits<T>::is_iec559()是替代品,但似乎只提到了类型。

1 个答案:

答案 0 :(得分:4)

C ++标准(n3797)通过引用包含C标准库,参见s1.2 / 2。

  

ISO / IEC 9899:1999第7条和ISO / IEC 9899:1999 / Cor.1:2001第7条中描述的库   ISO / IEC 9899:1999 / Cor.2:2003的第7条在下文中称为C标准库。

     

使用第18至30条和C.4中所述的资格,C标准库是C ++标准的子集   库。

标准中没有提到该符号,我不希望它被定义,因为它似乎特定于标准C.由于没有定义该符号,C ++不受附件F内容的约束。

相反,C ++标准包含多个以类似C ++形式提及的IEC 559。例如,

  

对于is_iec559 != false

的所有专精,都应该如此

在18.3.2.4/56中有具体提及。

  

static constexpr bool is_iec559;

     

当且仅当类型符合IEC 559标准时才为真.218

     

对所有浮点类型都有意义。

我认为可以公平地说C ++包含所有相同的功能(或缺少它们),但适应C ++世界。