命名空间声明
namespace 声明用于标识唯一的名称并将其分配到用户声明的命名空间。
namespace identifier
备注
此类命名空间用于解决大型程序和库中的名称冲突问题。 程序员可使用命名空间开发新的软件组件和库,而不会导致与现有组件的命名冲突。
例如:
// namespace_declaration1.cpp
namespace X
{
int i;
double j;
}
int main()
{
X::i++;
}
命名空间定义的语法是:
namespace identifier
{
[ declaration-list ]
}
namespace-definition 可嵌套在另一个 namespace-definition 中。 每个 namespace-definition 必须出现在文件范围上或出现在紧邻的另一个 namespace-definition 内。
例如:
// namespace_declaration2.cpp
// C2870 expected
namespace A
{
int j = 3;
int f(int k);
}
namespace Outer
{
int n = 6;
int func(int num);
namespace Inner
{
float f = 9.993;
}
}
int main()
{
namespace local // C2870: not at global scope
{
}
}
不同于其他声明性区域,命名空间的定义可拆分为单个翻译单元的若干个部分。
// namespace_declaration3.cpp
namespace A
{
// declare namespace A variables
int i;
int j;
}
namespace B
{
}
namespace A
{
// declare namespace A functions
void func(void);
int int_func(int i);
}
int main()
{
}
当命名空间在其初始定义后面以这种方式继续时,该继续称为扩展命名空间定义。该命名空间的原始定义称为原始命名空间定义。
如果此表示法的用法具有长名称或在大型程序内,则很难处理。 使用声明、使用指令和命名空间别名提供了引用命名空间成员的更直接的方法。
对于 namespace 声明,无论其包含新命名空间、未命名空间还是扩展命名空间定义,都必须带有包含在大括号内的命名空间体。 语句
namespace X;
是语法错误。 语句
namespace X{};
不是语法错误,但没有意义。
有关背景信息,请参阅命名空间。
原始命名空间定义中的标识符在使用它的声明性区域中必须是唯一的。 该标识符是命名空间的名称,用于引用其成员。
命名空间定义的声明性区域是其主体。 该主体必须包含在大括号 ({}) 中,并可以包含变量、函数、对象、模板和嵌套命名空间的声明或定义。 declaration-list 中的声明被视为命名空间的成员。 每个命名空间成员的名称将自动由其命名空间和范围解析运算符的名称进行限定。