命名空间
命名空间是一个封装机制,用于将标识符(如变量、函数、类等)组织在一起。这样同名的标识符可以出现在不同的命名空间中,避免名称冲突。本质上,命名空间就是定义了一个范围。
定义命名空间
命名空间的定义使用关键字 namespace
,后跟命名空间的名称,如下所示:1
2
3namespace namespace_name {
// 代码声明
}
访问命名空间
命名空间中的代码可以通过以下两种方式访问:
使用作用域解析运算符::
如下所示:1
name::code; // code 可以是变量或函数
实例1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using namespace std;
// 第一个命名空间
namespace first_space{
void func(){
cout << "Inside first_space" << endl;
}
}
// 第二个命名空间
namespace second_space{
void func(){
cout << "Inside second_space" << endl;
}
}
int main ()
{
// 调用第一个命名空间中的函数
first_space::func();
// 调用第二个命名空间中的函数
second_space::func();
return 0;
}
using指令
如果不想每次都使用::
来访问命名空间的成员,可以使用using
声明来引入整个命名空间或命名空间中的特定成员:
使用using指令引入整个命名空间1
using namespace namespace_name;
实例1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using namespace std;
namespace MyNamespace {
int x = 10;
void print() {
cout << "Inside MyNamespace" << endl;
}
}
int main() {
using namespace MyNamespace;
cout << x << endl; // 输出 10
print(); // 输出 Inside MyNamespace
return 0;
}
使用using指令引入命名空间中的特定成员1
using namespace_name::code;
实例1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using namespace std;
namespace MyNamespace {
int x = 10;
void print() {
cout << "Inside MyNamespace" << endl;
}
}
int main() {
using MyNamespace::x;
cout << x << endl; // 输出 10
// print(); // 编译错误,因为 print() 没有被引入
return 0;
}
嵌套命名空间
命名空间可以嵌套,允许将多个命名空间放在一个命名空间内。1
2
3
4
5
6namespace namespace_name1 {
// 代码声明
namespace namespace_name2 {
// 代码声明
}
}
实例1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using namespace std;
namespace first_space{
void func(){
cout << "Inside first_space" << endl;
}
namespace second_space{
void func(){
cout << "Inside second_space" << endl;
}
}
}
int main ()
{
// 调用第一个命名空间中的函数
first_space::func();
// 调用第二个命名空间中的函数
first_space::second_space::func();
return 0;
}
标准库命名空间 std
C++的标准库中,所有的标准函数、类和对象都包含在std
命名空间中。例如,cout
、cin
、vector
等都属于std
命名空间。