命名空间可以避免在公司团队开发过程中,每个人负责不同的模块,为了避免类名、函数名、全局变量等命名冲突。常见的qita平台命名空间的方案,例如 OC 类前缀,Java 包名。

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>

using namespace std;

// 命名空间可以避免命名冲突
namespace JJ{
class Person {
public:
int age;
};
}

namespace FX {

// FX全局变量
string g_str = "rose";

class Person {
public:
int height;
};
};

int main() {

JJ::Person person1;
person1.age = 12;

FX::Person person2;
person2.height = 180;


JJ::Person *p3 = new JJ::Person();


using namespace JJ; // 从这一行代码开始使用的Person都是JJ命名空间的内容
Person p4;
p4.age = 17;

getchar();
return 0;
}

命名空间可以嵌套,有个默认的全局命名空间,我们创建的命名空间默认都嵌套在它里面

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 JJ{
class Person {
public:
int age;
};
}

void test() {
cout << "------------test" << endl;
}

int main() {

// ::默认的全局命名空间
::test();

::JJ::Person *person = new ::JJ::Person();

getchar();
return 0;
}

命名空间是可以合并的,通常在类的声明与实现用的同一个命名空间。