Pau*_*nta 5 c++ namespaces std qualified-name
当我使用从C继承的函数时,就像在<cmath>or中那样<cstdlib>,我应该将它们限定为标准命名空间的一部分std::log,还是应该保留在C-scope中并将它们用作全局函数?怎么样size_t?
Lig*_*ica 16
<math.h>不,你不应该.
它们是否std在任何特定实现的命名空间中可用时未指定:
[C++11: D.5/2]:每个C头(每个头都有一个表单的名称)的name.h行为就好像每个由相应cname头放在标准库命名空间中的名称放在全局命名空间范围内.未指定是否首先在命名空间的命名空间范围(3.3.6)中声明或定义这些名称std,然后通过显式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中定义为宏的名称除外)在命名空间的命名空间范围(3.3.6)内std.未指定是否首先在全局命名空间范围内声明这些名称,然后std通过显式使用声明将其注入命名空间(7.3.3).