运行时库和全局命名空间

时间:2010-04-24 18:02:41

标签: c++

运行时库是否污染全局命名空间?

3 个答案:

答案 0 :(得分:3)

我认为您并不真正理解您使用的术语,但是C ++标准库中的名称存在于std命名空间中,所以答案是否定的。如果您通过.h文件名#include它们,则源自C标准库的头文件中的名称将放在全局命名空间中,例如:

#include <stdio.h>

如果你#include他们是这样的:

#include <cstdio>

然后名称存在于global和std名称空间中。

将对象放在std命名空间中的原因并不是避免“名称空间污染”,这不是一个价值中性术语,而是为了避免名称冲突。

答案 1 :(得分:1)

大多数库都干净地进入命名空间std: - 但是,为了向后兼容C,您可以选择通过包含<math.h>之类的旧标题来“污染”全局命名空间(它在全局命名空间中放置了许多名称)而不是<cmath>(正确使用std:命名空间)等适当的新名称。

答案 2 :(得分:1)

运行时库需要使用保留标识符。如果没有名称空间限定,则必须以两个下划线开头:__start等。

您不能使用保留名称。图书馆不允许使用您的名字。如果要么跨越另一个,那就是“污染”,这是非法的。

基本上,C和C ++的情况是相同的,除了正如其他答案所指出的那样,在C ++中,大多数标准库名称都具有名称空间限定。