命名空间(C++)
C++ 语言提供唯一全局命名空间。 这可能导致全局名称冲突。 例如,请考虑使用两个 C++ 头文件:
char func(char);
class String { ... };
// somelib.h
class String { ... };
这些定义,使用两个头文件在单个程序是错误的; String 类将冲突。
命名空间是一些其他的标识符为所有声明的名称在其中的一个描述性区域。 附加标识符不太可能使其名称将冲突与过程中的其他位置声明的名称。 使用相同的名称在单独的命名空间没有冲突是可能的,即使名称出现在同一个翻译单元。 只要它们显示在单独的命名空间,每个名称都是唯一的由于命名空间标识符的添加。 例如:
namespace one {
char func(char);
class String { ... };
}
// somelib.h
namespace SomeLib {
class String { ... };
}
现在类名不会分别冲突,因为它们成为 one::String 和 SomeLib::String,。
C++ 不允许多个名称命名空间。
// pluslang_namespace.cpp
// compile with: /c
// OK
namespace a {
namespace b {
int i;
}
}
// not allowed
namespace c::d { // C2653
int i;
}
在一个翻译单元的文件范围内的声明,命名空间外,仍是全局命名空间的成员。