namespace

命名空间要定义在全局,不能定义在局部

同一个域里面的同名的命名空间的内容会被合并

命名空间可以嵌套

命名空间通常放在头文件

命名空间不影响生命周期

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
namespace cyj{
int a = 10;
struct test{
string name;
};
class Test{
int age;
};
}
namespace bit{
int a = 20;
int add(int first, int second){
return first+second;
}
}

using namespace bit;
//1.使用命名空间内定义的变量时,可以提前将命名空间展开,然后直接使用
int main(){

int c = add(cyj::a, a); // ::域作用限定符
//2.若不展开,也可以用域作用限定符来表示这是某个命名空间内定义的变量
return 0;
}

:: 为域作用限定符,作用是说明符号右侧的变量是符号左侧的空间域里定义的那一个

比如cyj::a就是说这个a是命名空间域cyj里定义的变量a(而不是其他域比如bit命名空间域或者某个局部域里面定义的变量a

比如两个叫浴巾的人,一个来自山东,一个来自广东,在同一家公司工作,称呼他们的时候,为了防止重名,会叫“山东来的浴巾”或者“广东来的浴巾”

内嵌在一个外部命名空间的内部命名空间,在使用using namespace进行展开时,要先展开外部命名空间,再展开内部命名空间,否则找不到内部命名空间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
namespace cyj{
namespace yj{
int a;
}
namespace test{
int b;
}
}

using namespace cyj::test;//也可以通过域作用限定符直接展开外部命名空间里面的命名空间

#using namespace yj;//不能先展开,要先展开外部的
using namespace cyj;
using namespace yj;//先展开外部命名空间,再展开内部的


int main()
{
int c = a + b;
return 0;
}