The C++ language provides a single global namespace. This can cause problems with global name clashes. For instance, consider these two C++ header files:
With these definitions, it is impossible to use both header files in a single program; the String classes will clash.
A namespace is a declarative region that attaches an additional identifier to any names declared inside it. The additional identifier makes it less likely that a name will conflict with names declared elsewhere in the program. It is possible to use the same name in separate namespaces without conflict even if the names appear in the same translation unit. As long as they appear in separate namespaces, each name will be unique because of the addition of the namespace identifier. For example:
namespace one {
char func(char);
class String { ... };
}
// somelib.h
namespace SomeLib {
class String { ... };
}
Now the class names will not clash because they become one::String and SomeLib::String, respectively.
C++ does not allow compound names for namespaces.
// pluslang_namespace.cpp
// compile with: /c
// OK
namespace a {
namespace b {
int i;
}
}
// not allowed
namespace c::d { // C2653
int i;
}
Declarations in the file scope of a translation unit, outside all namespaces, are still members of the global namespace.
本文介绍了C++中命名空间的概念及其使用方法,旨在解决全局命名冲突的问题。通过将标识符置于不同的命名空间内,可以避免不同库之间的名称冲突。

1万+

被折叠的 条评论
为什么被折叠?



