【C++语言】冲突-C语言:命名空间

在这里插入图片描述



前言

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


1.命名空间:

C语言没有办法解决下图中的命名冲突问题,所以C++提出了namespace关键字来解决
在这里插入图片描述
比如:这里我想定义一个rand变量,但与库中的函数rand重名,C语言里就直接报错,没有办法。那C++有什么办法吗?有的,就是namespace关键字!

namespace关键字

这里我们就直接来展示下:
在这里插入图片描述
这里就相当于于直接访问了我们设置的空间里的rand,非常准确,避免了和库里的函数rand命名冲突

  • 具体来解释下:我们要先认识这个符号:: 叫做域作用限定符,在这里C::相当于是明确地方:C空间中的rand。
  • 那么我们提出一个问题:我们知道C语言中局部变量和全局变量,优先访问局部,那C++有办法解决吗?
  • 答案是肯定的:如下例子
    在这里插入图片描述
  • 这里我们直接在::域作用限定符前为空的,就可以优先访问全局变量。

上面就简单举了两个例子来说明了一下,接下来我们就进一步学习namespace关键字:

1.命名空间中可以定义变量、函数、类型

namespace C
{
	//变量:
	int a = 10;
	
	//函数:
	int Add(int left, int right)
	{
	return left + right;
	}
	
	//类型:结构体
	struct Node
	{
	struct Node* next;
	int val;
	};
}

2.命名空间可以嵌套

namespace C1
{
	//变量:
	int a = 10;
	
	//函数:
	int Add(int left, int right)
	{
	return left + right;
	}
	//嵌套命名空间:
	namespace C2
	{
		int a=20;
	}
}
  • 嵌套命名空间的访问:比如这里我要访问C2的aC1::C2::a

3.相同命名空间共存

在一个工程中,比如在test.cpp和test.h文件中都有N1命名空间,那么会将两个文件的同名空间整合

2 命名空间的使用方式:

1.名称加用域作用限定符的方式访问(同上)

2.使用using引入某个空间中的某个变量

在这里插入图片描述
如图,我们用了using引入了C中的b,就可以直接访问量

3.使用using引入展开某个空间

在这里插入图片描述
同样可以实现直接访问变量b。

  • 当然这里需要强调一下,直接全部展开会有风险,如果我们定义的命名空间和库里的重名也会报错的。

总结

关于C语言和C++的一些冲突,命名上就是突出的一点,C语言无法解决,所以C++提出方案。

  • 命名空间的介绍,以及namespace关键字的使用
  • 命名空间的三个特点
  • 命名空间的使用方法

C++语言系列学习目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加,添加超链接

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖胖龙大兄很忙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值