fabsf是C ++ 11中std名称空间的一部分吗?

时间:2019-01-03 18:18:51

标签: c++ c++11 cmath

页面https://en.cppreference.com/w/cpp/numeric/math/fabs提到std::fabsf自C ++ 11起可用。但是,当我使用G ++ 6.3.0甚至编译使用std::fabsf的最简单程序时,它表示fabsf不是std的成员。

#include <cmath>
int main()
{
    return (int)std::fabsf(0.0f);
}

哪个是对的? G ++ 6.3.0是否在std中不包含它是错误的,还是在C ++ 11中将其作为std的一部分提到上一页是错误的?

如果是G ++错误,那么在更高版本中是否已解决?

2 个答案:

答案 0 :(得分:3)

cppreference似乎不正确。看来这是为C ++ 17添加的,因为它的标题为[numerics] Apply P0175 (C Synopses)added to the draft in 2016,我们可以看到p0175r1确实添加了:

 float fabsf(float x);

libc++ status未指示p0175r1的状态,因此将表明它尚不支持这些更改。我在tjhe libstdc++ status page中找不到该提案的订单项。

答案 1 :(得分:3)

是的,来自fabsf的{​​{1}}和所有其他-f / -l函数是C +中通过math.h的{​​{1}}命名空间的一部分+11。它是在2002年左右添加的,当时C ++ 0x在C99标准库的基础上重新构建,这使std包含了这些新功能。

  

cmath

     

这些标头的内容分别与标准C库标头[c.math]/4[c.math]/4相同,但有以下更改:

(历史记录:添加所有<math.h> / <stdlib.h>变体的意图在C ++ 03中已经显而易见,请参阅LWG289

但是,直到2016年,列出cmath内容的表格都被忽略了 p0175r1修复了所有此类表格,使它们与标准保持一致。

  

-f

     

影响标准

     

更改纯粹是社论。