匿名命名空间的学习

C++的匿名命名空间
首先这篇文章很有用
当声明命名空间时的名称为空时,则该命名空间为匿名命名空间(unnamed namespace)。匿名的空间是C++用于替代使用static定义作用域为本编译单元的全局函数或全局变量的一种新的替代方式

#include <iostream>

using namespace std;

namespace{ int i = 256; }

namespace ns
{
	namespace { int i = 128; }
	void func(void)
	{
		cout<<"ns::func :" <<endl;
		cout<<"\t::i="<<::i<<endl;
		cout<<"\tns::i="<<i<<endl;
	}
}

int main(void )
{
	cout<<::i<<endl;
	cout<<"i="<<i<<endl;
	cout<<"ns::i="<<ns::i<<endl;
	ns::func();
	return 0;
}

运算结果

在这里插入图片描述

我觉得这个例子挺有趣的,也有点疑惑。
main函数里面的第一个cout,按照我的理解应该是默认命名空间的i了,但是这里默认明明空间里面没有i,但是默认命名空间里面有个匿名命名空间,所以编译器就直接到匿名命名空间里面去找i去了,所以i=256
main函数里面的第二个cout,我觉得这样跟第一个一样,没区别
main函数里面的第三个cout,很明显是nsnamespace里面的i,但是在ns里面没有i,只能继续往里面找,所以里面的匿名命名空间里面的i=128
main函数里面最后一个,func里面的第二句cout,他要的是默认命名空间的i,然后外面的默认命名空间里面的匿名命名空间有i=256,所以i=256,然后最后找的就是ns里面的匿名命名空间的i,所以i=128

其实就是匿名命名空间可以有很多个,这里的很多个是指的是在一个命名空间里面可以有一个,你想有多几个就多声明几个命名空间。

而匿名命名空间的用法跟static有点像的,但是它的功能比static更强,具体还是看一下刚开始的那一篇文章,里面的例子都撸一遍,脑子过一遍,对这些概念就会清楚一点了。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值