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

Ped*_*eno 6 c++ cmath c++11

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);
}
Run Code Online (Sandbox Code Playgroud)

哪一个是对的?G ++ 6.3.0是否没有将其包含在其中std是错误的,还是上述页面将其作为stdC ++ 11的一部分提及时是错误的?

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

Sha*_*our 6

看起来 cppreference 不正确。似乎这是为 C++17 添加的,因为它是在 2016 年以标题添加到草案中[numerics] Apply P0175 (C Synopses),我们可以看到p0175r1确实添加了:

 float fabsf(float x);
Run Code Online (Sandbox Code Playgroud)

libc中++状态并不表示一个状态p0175r1,这样就表明它不支持这些变化呢。我在tjhe libstdc++ status page找不到提案的订单项。


Cub*_*bbi 5

是的,fabsf并且所有其他-f/ -l函数math.h都是C ++ 11中std命名空间的一部分cmath。它是在2002年左右添加的,当时C ++ 0x在C99标准库的基础上重新构建,该库[c.math]/4包括这些新功能。

[c.math]/4

这些标头的内容是一样的标准C库头<math.h>并且<stdlib.h>分别具有以下变化:

(历史记录:添加所有-f/ -l变体的意图在C ++ 03中已经显而易见,请参阅LWG289

但是,直到2016年,列出cmath内容的表都被忽略了,那时 p0175r1修复了所有此类表以使其符合标准。

p0175r1

对标准的影响

更改纯粹是社论。

  • 我们是说这是由于编辑疏忽导致的工具链错误? (2认同)