【C++】命名空间的引入

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

这么说可能不太理解,我们来用代码举个栗子。

#include <stdio.h>
#include <stdlib.h>

int a = 10;
int a = 20;
int main()
{
	printf("hello world");
	system("pause");
	return 0;
}

在这里我们如果想要定义这个 a 是不可以的。因为它们两个在同一作用域, 都是 a,无法区分谁是谁。

但是如果写成这个样子,将其中一个 a 放在main函数里,就可以编译通过。 所以说,不是不可以出现同名的变量,只要放在不同区域就可以了。

#include <stdio.h>
#include <stdlib.h>

int a = 10;
int main()
{
	int a = 20;
	printf("%d\n",a);
	system("pause");
	return 0;
}

在这里,a 的输出结果是20,因为我们知道,这里的访问原则是就近原则。那如果我非要访问外面的这个 a 怎么办?

#include <stdio.h>
#include <stdlib.h>

int a = 10;
int main()
{
	int a = 20;
	printf("%d\n",::a);
	system("pause");
	return 0;
}

我们只需要在 a 的前面加上 “::”域作用限定符就可以了,“::a”它表示 a 访问的是限定符左边的内容,现在左边没有给名称,表示a作用域是全局域,这时,就可以访问到main函数外面的 a 了,它的输出结果是10。这里就有了的概念。

也就是说在C语言中,同一个域中不可以取同名的变量,这也是根据它的命名规则来的。在这样的规则下,我们也不可以把变量名定义成C语言的关键字,因为这里会有冲突,系统会搞不懂你到底表示的什么意思。

所以在C++中,开发者把这一点做了优化,就有了命名空间的由来——namespace。

那么我们知道了命名空间是用来干什么的之后,就要来看看怎么定义命名空间。

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名
空间的成员。

namespace N
{
	int printf = 100;
	int strstr = 200;
}
int main()
{
	printf("%d\n",N::strstr);
	printf("%d\n",N::printf);
	system("pause");
	return 0;
}

如上代码,用了namespace之后,我就可以将函数名或者任意关键字定义成一个变量并且正常使用。在这里,命名空间 N 限制了 printf 和 strstr 只属于该作用域,作为一个隔离,不怕和别人冲突。

猜你喜欢

转载自blog.csdn.net/Miss_Monster/article/details/84714010