命名空间 (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;
}
一个翻译单元的文件范围内的声明仍是全局命名空间的成员在命名空间外。