当我使用从C继承的函数时,如<cmath>
或<cstdlib>
中的函数,我应该将它们限定为标准名称空间std::log
的一部分,还是应该保留在C范围并将它们用作全局函数?那么size_t
呢?
答案 0 :(得分:16)
<math.h>
不,你不应该。
未指明它们是否在任何特定实现的名称空间std
中可用:
[C++11: D.5/2]:
每个C标头(每个标头都有一个name.h
形式的名称)就好像放在标准库名称空间中的相应cname
标头的每个名称都放在全局命名空间范围。 未指定是否首先在名称空间std
的名称空间作用域(3.3.6)中声明或定义这些名称,然后通过显式 using-declarations (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
的内容应与相应标题name.h
的内容相同,如C标准库(1.2)或C Unicode TR,视情况而定,如果包含的话。但是,在C ++标准库中,声明(除了在C中定义为宏的名称除外)在命名空间std
的命名空间范围(3.3.6)内。 未指定这些名称是否首先在全局命名空间范围内声明,然后通过显式 using-declarations (7.3.3)注入命名空间std
。