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 ++错误,那么在更高版本中是否已解决?
看起来 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中找不到提案的订单项。
是的,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对标准的影响
更改纯粹是社论。
| 归档时间: |
|
| 查看次数: |
422 次 |
| 最近记录: |