命名空间是一个封装机制,用于将标识符(如变量、函数、类等)组织在一起。这样同名的标识符可以出现在不同的命名空间中,避免名称冲突。本质上,命名空间就是定义了一个范围。

定义命名空间

命名空间的定义使用关键字 namespace,后跟命名空间的名称,如下所示:

1
2
3
namespace 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
#include <iostream>
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
#include <iostream>
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
#include <iostream>
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
6
namespace 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
#include <iostream>
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命名空间中。例如,coutcinvector等都属于std命名空间。