C++入门基础☞命名空间

C++入门基础☞命名空间


提示:本文所用环境基于C++98标准,C++是兼容C的。



提示:以下是本篇文章正文内容,下面案例可供参考

命名空间

一、命名空间是什么?

在编写程序C程序时,也许会遇到我们定义的变量、函数名与库里的重名而发生冲突,不仅如此,在面对一些大型的多人协作编写的程序中,两个人写的代码,也许会因相同名字的标识符而发生冲突,然而它们名字相同,本质却是不同,这点是不同于函数重载的。为了有效地解决这一问题,C++提出了命名空间
涉及关键字:namespace

二、命名空间的创建

命名空间的创建:

namespace 名字
{
   ……
}

其中,名字指的是:为该命名空间所取的一个名字。
例如:

namespace YDY
{
	int rand = 0;
}

创建一个名为YDY的命名空间。命名空间里可以定义函数/变量名/类型。
实际上命名空间定义了一个 命名空间中的所有内容都局限于该命名空间中

创建了一个命名空间后我们如何才能访问到这个域里的内容呢?
在这里插入图片描述
上述例子中,并没有访问到YDY这个命名空间所定义的域里的rand,如果它访问到了,打印出来的应该是0,它真正使用的rand其实是stdlib.h这个文件里的rand。

这里我们不得不提到一个重要的符号: ::
这个符号称为:域作用限定符
使用方式为:域::标识符,含义为该标识符为该域里的标识符。

在这里插入图片描述
YDY::rand,YDY这个域里的rand。
它依旧是一个全局变量,放在静态区里的。

另外,命名空间是允许嵌套定义的。例如:

//命名空间可以嵌套定义
namespace N1
{
	int a = 0;
	int ADD(int x, int y)
	{
		return x + y;
	}
	namespace N2
	{
		int a = 0;
		int SUB(int x, int y)
		{
			return x - y;
		}
	}
}

如何访问?

    //调用ADD函数
	N1::ADD(1, 2);
	//调用SUB函数
	N1::N2::SUB(5, 1);

我们已经知道,namespace可以解决命名冲突的问题,但是如果我们命名了两个名字相同的命名空间呢?
它并不会报错,在程序编译时,编译器会把它两整合为一个命名空间。

三、命名空间的使用

命名空间的使用方式一共有三种:

  • 加命名空间名称及作用域限定符。
    也就是你需要使用哪一个时,就展开那一个。
//加命名空间名称及作用域限定符
int main(void)
{
	printf("%d\n", N::a);
	return 0;
}
  • 使用using将命名空间中成员引入
    可以直接展开你经常使用的那一个。
//使用using将命名空间中成员引入
using N::b;
int main()
{
	printf("%d\n", N::a);
	printf("%d\n", b);
	return 0;
}
  • 使用using namespace 命名空间名称引入
    直接将整个命名空间展开。
//使用using namespace 命名空间名称引入

using namespace N;
int main()
{
	printf("%d\n", N::a);
	printf("%d\n", b);
	Add(10, 20);
	return 0;
}

总结

现在再来看一下C++的模板也就能够不那么晕了

# include <iostream>
using namespace std;

int main(void)
{
    ……
    return 0;
}

using namespace std;代表的含义就是展开 std这个命名空间,因为C++所需的大部分库函数的定义都存放在这个std这个命名空间所定义的域里面,我们要想使用它们就必须展开。但是,这里也有一个非常大的问题,如果我们直接将命名空间展开来,就相当于这个命名空间定义就没有意义了,所以需要谨慎使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小小酥诶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值