}
),但在函数之外无效。
|
|
|
|
|
|
inner block: x: 50 y: 50 outer block: x: 10 y: 50 |
y
在内部块中没有被隐藏,因此访问 y
仍然是访问外部变量。namespace identifier { named_entities } |
identifier
是任何有效的标识符,而 named_entities
是包含在命名空间内的一组变量、类型和函数。例如:
|
|
a
和 b
是在名为 myNamespace
的命名空间内声明的普通变量。a
或 b
)访问,但如果从 myNamespace
命名空间外部访问,则必须使用作用域解析运算符 ::
进行适当的限定。例如,要从 myNamespace
外部访问前面的变量,它们应被限定为:
|
|
|
|
5 6.2832 3.1416 |
value
。一个在命名空间 foo
中定义,另一个在 bar
中定义。由于命名空间的存在,没有发生重定义错误。另请注意,pi
在命名空间 bar
内部以非限定方式访问(直接用 pi
),而在 main
函数中再次访问时,则需要将其限定为 bar::pi
。
|
|
a
和 c
在命名空间 foo
中,而 b
在命名空间 bar
中。命名空间甚至可以跨越不同的翻译单元(即,跨越不同的源代码文件)。using
将一个名称引入到当前的声明区域(例如一个块),从而避免了对该名称进行限定的需要。例如:
|
|
5 2.7183 10 3.1416 |
main
函数中,变量 x
(没有任何名称限定符)指向 first::x
,而 y
指向 second::y
,这正是 using
声明所指定的。变量 first::y
和 second::x
仍然可以被访问,但需要使用完全限定的名称。using
也可以用作指令来引入整个命名空间:
|
|
5 10 3.1416 2.7183 |
first
,所有不带名称限定符直接使用的 x
和 y
也会在命名空间 first
中查找。using
和 using namespace
仅在其声明所在的块中有效,或者如果它们直接在全局作用域中使用,则在整个源文件中有效。例如,可以通过将代码分割到不同的块中,先使用一个命名空间的对象,然后再使用另一个命名空间的对象:
|
|
5 3.1416 |
namespace new_name = current_name;
std
命名空间中声明。实际上,这些教程中的大多数示例都包含了以下这行代码:
|
|
std
命名空间中的所有名称在代码中可以直接访问。在这些教程中这样做是为了方便理解并缩短示例的长度,但许多程序员更喜欢在他们的程序中为每个使用的标准库元素进行限定。例如, вместо
|
|
|
|
std
命名空间中的元素是通过 using
声明引入,还是在每次使用时都进行完全限定,都不会以任何方式改变最终程序的行为或效率。这主要是一个风格偏好问题,尽管对于混合使用多个库的项目,显式限定通常是首选。
|
|
0 4285838 |
x
的值保证为零。y
实际上可以包含任何值(包括零)。![]() 重载与模板 | ![]() 目录 | ![]() 数组 |