C++的名字空间

三、名字空间(namespace)

1、名字空间的作用
1)避免名字冲突
2)划分逻辑单元

2、定义名字空间
namespace 名字空间{
名字空间的成员1;
名字空间的成员2;
名字空间的成员3;
……
名字空间的成员n;

}

注:名字空间成员可以是变量、函数、类型、名字空间

eg:

namespace ns1{
		int num = 100;
		void func(void){//……}
		struct student{};
		namespace ns2{};
	}

3、名字空间成员的使用
1)通过作用域限定操作“::”
空间成员::要访问的成员
eg:

int main(void){
		//空间成员不能直接访问
		cout << num << endl;//error

		//通过"::"访问空间里面的成员
		cout << ns1::num << endl;//ok
	}

02namespace.cpp

#include <iostream>
namespace ns1{
	void func(void){
		std::cout << "ns1的func函数" << std::endl;
	}
}
int main(void){
	//func();发生错误
	ns1::func();
	return 0;	
}

2)名字空间指令
using namespace 名字空间名;
在该条指令以后的代码中,指定名字空间中的成员都可见,可以直接访问,省略"空间名::"
eg:

int main(void){
	using namespace ns1;//名字空间指令
	cout << num << end1;//ok
}

注:这种方法要谨慎使用,小心不同名字空间中有相同的成员名,容易引发歧义。

常用场景:using namespace std;
以后在使用标准名字空间按里面的成员省略"std::"

#include <iostream>
using namespace std;//标准名字空间指令

int main(void){
	cout <<"hello world!"<<endl;
	return 0;
}

3)名字空间声明
using 名字空间名::名字空间成员;
将名字空间中特定的一个成员引入当前作用域,在该作用域访问这个成员就如同访问局部的成员一样,可以直接访问,省略"空间名::"
eg:

using namespace std;
	int main(void){
		using ns1::num;//名字空间声明
		cout << num << endl;//ok
	}

4、无名名字空间
不属于任何名字空间的标识符,将被编译器之后放入无名名字空间中,无名名字空间里面的成员正常可以直接访问,但是当无名名字空间的成员和局部的标识符名字一样时局部优先,这时如果还希望访问无名名字空间的成员,可以使用作用域限制操作。
符:"::要访问的成员"

综合例子:

#include <iostream>
using namespace std;

namespace ns1{
	num = 100;
	void func(void){
		cout << "This is ns1's function." << endl;
	}
}

namespace ns2{
	num = 200;
	void func(void){
		cout << "This is ns2's function." << endl;
	}
}
//普通全局变量,将被放入无名的名字空间中
int num = 300;
void main(void){
	cout << num << endl;//300
	using ns1::num;//名字空间声明
	cout << num << endl;//100,体现局部优先原则
	cout << ns2::num << endl;//200
	cout << ::num <<endl;//300
	return 0;
}

5、名字空间嵌套//了解
eg:

#include <iostream>
using namespace std;
namespace ns1{
	int num = 100;
	namespace ns2{
		int num = 200;
		namespace ns3{
			int num = 300;
		}
	}
}
int main(void){
	cout << ns1::num << endl;//100
	cout << ns1::ns2::num << endl;//200
	cout << ns1::ns2::num3::num << endl;//300
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值