页面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 ++错误,那么在更高版本中是否已解决?
答案 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
影响标准
更改纯粹是社论。