运行时库是否污染全局命名空间?
答案 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 ++中,大多数标准库名称都具有名称空间限定。