C++-namespace

在命名空间后面添加::限制运算符可以取到对应的具体的命名空间的内容,用来解决命名的冲突

命名空间下可以放的内容

变量,函数,结构体,类等等都可以

命名空间必须要声明在全局作用域下

不可以命名在局部作用域如函数栈中

命名空间可以嵌套命名空间

#include<iostream>
using namespace std;

namespace A
{
int test_A = 10;
namespace B
{
int test_B = 11;
}
}
int main()
{
cout << A::test_A << A::B::test_B << endl;
return 0;
}

命名空间是开放的,可以随时添加,但是不允许重定义

#include<iostream>
using namespace std;

namespace A
{
int test_A1 = 10;
int test_A2 = 100;
namespace B
{
int test_B = 11;
}
}
namespace A
{
int test_A3 = 1000;
}
int main()
{
cout << A::test_A3;
return 0;
}

命名空间可以是匿名的

用匿名的命名空间来写,相当于写了一个全局变量

命名空间可以取别名

#include<iostream>
using namespace std;

namespace A
{
int test_A1 = 10;
int test_A2 = 100;
namespace B
{
int test_B = 11;
}
}
namespace A
{
int test_A3 = 1000;
}
int main()
{
namespace aa = A;
cout << aa::test_A3;
return 0;
}

using

using声明和编译指令。

using 声明

声明变量后,后面使用的就是该命名空间的变量。

#include<iostream>
using namespace std;

namespace A
{
int test_A1 = 10;
int test_A2 = 100;
int test_A3 = 111;
namespace B
{
int test_B = 11;
}
}
namespace B
{
int test_A3 = 1000;
}
void test01()
{
using B::test_A3;
cout << test_A3;

}
int main()
{
test01();

}

using编译指令

using namespace xxx;//表示使用某一个命名空间

using和参数重名

using编译指令和就近原则同在时先使用就近原则

当using有多个namespace时需要作用于区分