fabsf 是 C++11 中标准命名空间的一部分吗?
Is fabsf part of the std namespace in 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);
}
哪一个是对的?G++ 6.3.0 没有将其包含在 std
中是错误的,还是上面的页面在 C++11 中将其作为std
的一部分提及是错误的?
如果是 G++ 是错误的,那么在以后的版本中会修复吗?
是的,math.h
中的 fabsf
和所有其他 -f
/-l
函数都是通过 C++11 中的 cmath
std
命名空间的一部分。它是在2002年左右添加的,当时C++0x重新基于C99标准库,这使得[c.math]/4
包含这些新功能。
[c.math]/4
这些标头的内容分别与标准 C 库标头
<math.h>
和<stdlib.h>
相同,但进行了以下更改:
(历史注释:添加所有-f
/-l
变体的意图在 C++03 中已经很明显,请参阅 LWG289)
然而,列出cmath内容的表格直到2016年才被忽略,当时P0175R1固定了所有此类表格,使其符合标准。
p0175r1
对标准的影响
这一变化纯粹是社论。
看起来 cpp 首选项不正确。这似乎是为 C++17 添加的,因为它在 2016 年以标题[numerics] Apply P0175 (C Synopses)
添加到草案中,我们可以看到 p0175r1 确实添加了:
float fabsf(float x);
libc++ 状态不表示p0175r1
的状态,因此表明它尚不支持这些更改。我在 libstdc++ 状态页面中找不到提案的行项目。
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 是否可以将函数导入命名空间,但不能导出它?
- C++ C++类中的命名空间降级
- 如何使用 soong 命名空间来有条件地编译模块
- 使用 Clang++ 有没有办法将文件作为命名空间等包含?
- fabsf 是 C++11 中标准命名空间的一部分吗?
- 函数未被识别为命名空间的一部分
- 如何正确重载作为用户定义命名空间一部分的模板化类的插入运算符?