命名空间的使用及作用、无名命名空间

命名空间的使用方法

#include "stdafx.h"
#include <iostream>
using namespace std; //标准库的命名空间 解包了所有此空间下的内容

//命名空间的关键字(key word) namespace + 空间名

namespace Space
{
	int x;
	int y;
}

namespace Other
{
	int x;
	int y;
}

int _tmain(int argc, _TCHAR* argv[])
{
	Space::x = 200; //直接带前坠使用
	cout << Space::x << endl;

	using Space::x; //相当于将Space中的x解包到此作用域下 
	//之后可以直接对x进行操作 但是不能与本作用域中原有变量冲突
	x = 20;
	cout << x << endl;

	//using namespace Space;  将此命名空间中所有内容解包到此作用域

	return 0;
}
 

命名空间的嵌套

#include "stdafx.h"
#include <iostream>
using namespace std; 

//命名空间的关键字(key word) namespace + 空间名

namespace Space
{
	int x; 
	int y;
	namespace Other //命名空间的嵌套
	{
		int m;
		int n;
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	using namespace Space::Other; 
	//只有解开里面嵌套的命名空间才能用里面的值

	m = 20;
	cout << m << endl;

	return 0;
}
 

命名空间的作用、用途

作用:命名空间是程序设计者命名的内存区域,程序设计者根据需指定一些有名字的空间域,把一些全局实体分别存放到各个命名空间中,从而与其他全局实体分隔开,通俗的说,每个名字空间都是一个名字空间域,存放在名字空间域中的全局实体只在本空间域内有效,名字空间对全局实体加以域的限制,从而合理的解决命名冲突,命名空间就是为了避免可能的名字冲突,保持代码的局域性。

协同开发:
因为同名的命名空间可以融合,所以当多人开发时,可以将自己的内容都裹上同一个名字的命名空间,具体操作是 例如你开发一个类 将它的头文件、和cpp文件中都用命名空间包装好,当多个文件合一起后 include相应头文件 在解开统一的命名空间,就可以使用里面的内容。
 

无名命名空间

定义无名命名空间后,外部不能得知无名命名空间的成员名字,即不让外部知道我的成员名字及其调用,由于没有名字所以其他文件无法引用,它只能在本文件的作用域内有效,它的作用域:从无名命名空间声明开始到本文件结束,在本文件使用无名命名空间成员时不必用命名空间限定,其实无名命名空间和static是同样的道理,都是只在本文件内有效,无法被其他文件引用

namespace
{
	int a = 100;
	void foo() { cout << "foo" << endl; }
}

int main()
{
	cout << a << endl;
	foo();
}

note:

  • 无名命名空间允许无限定的使用其成员函数,并且为它提供了内部连接(只有在定义的文件内可以使用
  • 命名空间不需要命名,它的成员不需要限定就可以使用。
  • 如果在一个文件中包含了两个相同成员的无名命名空间,其含义是不明确的,会导致重复定义的错误。
  • 无名命名空间可以替代全局作用域的static数据成员
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值