用“std”名称空间限定C函数可以吗
Is it ok to qualify C functions with the `std` namespace?
当我使用从C继承的函数时,比如<cmath>
或<cstdlib>
中的函数,我应该将它们限定为标准命名空间std::log
的一部分,还是应该保留在C作用域中并将它们用作全局函数?size_t
呢?
如果使用例如<math.h>
不,你不应该。
未指定它们是否在任何特定实现的命名空间std
中可用:
[C++11: D.5/2]:
每个C标头(每个标头具有形式为name.h
的名称)的行为就好像由相应的cname
标头放置在标准库命名空间中的每个名称都被放置在全局命名空间范围内未指定这些名称是否首先在命名空间std
的命名空间范围(3.3.6)中声明或定义,然后通过显式使用声明(7.3.3)注入全局命名空间范围。
但是,您不应该使用此标头:
[C++11: C.3.1/1]:
为了与标准C库兼容,C++标准库提供了18个C头(D.5),但在C++中不赞成使用它们。
如果使用例如<cmath>
是的,你应该。
未指定它们是否在任何特定实现的全局命名空间中可用:
[C++11: 17.6.1.2/4]:
除第18条至第30条和附件D中另有说明外,每个标头cname
的内容应与C标准库(1.2)或C Unicode TR(视情况而定)中规定的相应标头name.h
的内容相同,如同包含一样。然而,在C++标准库中,声明(在C中定义为宏的名称除外)在名称空间std
的名称空间范围(3.3.6)内未指定这些名称是否首先在全局命名空间范围内声明,然后通过使用声明的显式注入命名空间std
(7.3.3)。
相关文章:
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 在命名空间中定义函数还是限定函数
- CUDA内核和数学函数的显式命名空间
- 在命名空间中使用全局命名空间中的函数
- 是否可以将函数导入命名空间,但不能导出它?
- 当 A 在 for 循环中调用函数 B 时,如何计算函数 A 的空间复杂度?
- 是否有 Windows 用户空间函数来枚举连接的网络共享?
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- 使用另一个命名空间中的函数C++
- Visual Studio 无法解决类和命名空间中重载的明确函数
- 命名空间更改函数定义
- C++命名空间中调用 void 函数的错误
- C++ 17 个友元函数声明和内联命名空间
- MFC 函数来自 :: 命名空间?
- 在命名空间内使用函数的循环包含
- 在命名空间中使用指令和函数重载
- 命名空间中未引用的函数
- 使用类指针重载C++命名空间函数模板专用化替代方法?
- 朋友定义函数的名称空间是什么
- cgo调用C++中定义的函数(位于命名空间中)