C++系列: 嵌套命名空间

2023-05-16

目录

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;
}

实验结果

表明嵌套命名空间的引用是符合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;
}

实验结果

表明在命名空间内部的不同层次符号引用依然遵循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;
}

实验结果

表明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;
}

实验结果

表明np2优先会调用自己内部的符号。正如一个函数的内部,它会优先调用自己的局部变量,接着才考虑寻找全局变量。

 

3.最后

一定要记住,namespace本质是用来解决命名冲突的问题。

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++系列: 嵌套命名空间 的相关文章

随机推荐