目录
1.什么是嵌套命名空间?
2.实验
2.1 外部引用嵌套命名空间内的符号
2.2 命名空间内容不同层次间符号的引用
3.最后
1.什么是嵌套命名空间?
嵌套命名空间就是在命名空间里面在定义其它的命名空间,就像是俄罗斯套娃。
namespace np1
{
namespace np2
{
namespace np3
{
}
}
...
}
2.实验
2.1 外部引用嵌套命名空间内的符号
情况一
#include <iostream>
using namespace std;
namespace np1
{
namespace np2
{
void func2()
{
cout << "np1::np2::func2" << endl;
}
}
void func1()
{
cout << "np1::func1" << endl;
}
}
int main()
{
np1::func1();
np1::np2::func2();
return 0;
}
实验结果
![](https://img-blog.csdnimg.cn/2021010308133891.png)
表明嵌套命名空间的引用是符合namespace语法的,没有特殊之处。
情况二
using namespace np1;
int main()
{
func1();
np2::func2();
return 0;
}
输出结果一样。
2.2 命名空间内容不同层次间符号的引用
情况一:第一层调用第二层
#include <iostream>
using namespace std;
namespace np1
{
namespace np2
{
void func2()
{
cout << "np1::np2::func2" << endl;
}
}
void func1()
{
np2::func2();
}
}
int main()
{
np1::func1();
return 0;
}
实验结果
![](https://img-blog.csdnimg.cn/20210103082334938.png)
表明在命名空间内部的不同层次符号引用依然遵循namespace语法。
情况二:第二层调用第一层
#include <iostream>
using namespace std;
namespace np1
{
void func1()
{
cout << "np1::func1" << endl;
}
namespace np2
{
void func2()
{
func1();
//np1::func1();
}
}
}
int main()
{
np1::np2::func2();
return 0;
}
实验结果
![](https://img-blog.csdnimg.cn/20210103082737359.png)
表明np1相对于np2来说,是默认命名空间或者是全局命名空间。
情况三:第二层调用第一层,但是第一层和第二层存在相同的符号
#include <iostream>
using namespace std;
namespace np1
{
void func1()
{
cout << "np1::func1" << endl;
}
namespace np2
{
void func1()
{
cout << "np1::np2::func1" << endl;
}
void func2()
{
func1();
}
}
}
int main()
{
np1::np2::func2();
return 0;
}
实验结果
![](https://img-blog.csdnimg.cn/20210103083309400.png)
表明np2优先会调用自己内部的符号。正如一个函数的内部,它会优先调用自己的局部变量,接着才考虑寻找全局变量。
3.最后
一定要记住,namespace本质是用来解决命名冲突的问题。
![](https://img-blog.csdnimg.cn/20210103104635607.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODk1NjAyNA==,size_16,color_FFFFFF,t_70)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)