#命名空间

本文详细介绍了C++中命名空间的作用,包括解决命名冲突的方法,表达形式,域作用限定符的使用,以及命名空间的展开和特点,如嵌套、部分展开和命名空间的合并。
摘要由CSDN通过智能技术生成

目录

是什么

产生命名冲突的原因

表达形式

域作用限定符

命名空间的展开

命名空间的特点


1.命名空间是什么——解决命名冲突

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存 在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化, 以避免命名冲突或名字污染

2.产生命名冲突的原因

在完成同一个项目的时候,三方的命名可能会产生冲突。

3.表达形式

命名空间里面可以定义变量,函数,类型等

namespace 是关键字,定义一个命名空间域

namespace field
{
	int rand = 10;//变量
	int Add(int a,int b)//函数
	{
		return a + b;
	}
	struct Node//结构体
	{
		struct  Node* next;
		int data;
	};
}

4.域作用限定符   ::的使用

::是指定的意思,改变了编译器的查找规则,默认从全局空间里面去找,不会进入命名空间,::他去命名空间里面去找,这个时候哪怕全局空间里面有与命名定义域内相同命名的函数Add,但是编译器找到的是命名空间里面的Add。

结构体和其他两种类型有一些不同

int main()
{
	printf("%d\n", field::rand);
	printf("%d\n", field::Add(4,2));
	struct  field::Node data;
	return 0;
}

6.命名空间的展开

全部展开(授权)

using namespace filed;

上面这个语句可以将filed这个域全部展开,展开之后,域里面定义的各种,则可以不通过::直接访问

这个时候就需要注意,全局空间里面就不能出现与rand相同名字的变量,会命名冲突

感觉展开之后,命名空间域里面的各种定义和在全局空间中的定义就没有什么使用上的区别了。

部分展开(授权)

using field::Add;只展开命名空间域里面的部分定义。

7.命名空间的特点

可以嵌套,空间域里面套空间域。

namespace field
{
	int rand = 10;//变量
	namespace XX
	{
		int rand = 20;
	}
}
int main()
{
	printf("%d\n", field::XX::rand);
	return 0;
}

相同名字的命名空间域会自动合并

下面的名字相同的两个域会合并,其实就相当于一个域,所以会产生下面的重定义的错误。

namespace field
{
	int rand = 10;//变量
	namespace XX
	{
		int rand = 20;
	}
}
namespace field
{
	int rand = 30;
}
int main()
{
	printf("%d\n", field::XX::rand);
	return 0;
}

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值