用“std”名称空间限定C函数可以吗

Is it ok to qualify C functions with the `std` namespace?

本文关键字:函数 空间 std      更新时间:2023-10-16

当我使用从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)。