当我使用从C继承的函数,例如<cmath>
或<cstdlib>
中的函数时,我应该将它们限定为标准命名空间std::log
的一部分,还是应该保留在C范围内并将它们用作全局函数?size_t
呢?
当我使用从C继承的函数,例如<cmath>
或<cstdlib>
中的函数时,我应该将它们限定为标准命名空间std::log
的一部分,还是应该保留在C范围内并将它们用作全局函数?size_t
呢?
<math.h>
不,你不应该这样做。
在任何特定的实现中,它们是否可用于命名空间std
都是未指定的:
[C++11:D.5/2]:
每个C头文件,其名称形式为name.h
,尽管与其对应的头将所放置在标准库命名空间中的每个名称都视为放置在全局命名空间范围内。 未指定这些名称是否首先在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]:
除Clauses 18至30和Annex D所述之外,每个头文件的内容应与相应的头文件name.h
相同,如同已包含C标准库(1.2)或C Unicode TR中规定的那样。然而,在C++标准库中,声明(除了在C中定义为宏的名称)位于std
命名空间(3.3.6)中。然而,这些名称是否首先在全局命名空间作用域内进行了声明并随后通过显式using-declaration (7.3.3) 注入到命名空间std
中是未指定的。
std::size_t
,但我必须承认,在我经常使用size_t
的源文件中,我倾向于使用using std::size_t;
。 - CB Bailey