C++命名空间

发布时间:2024年01月17日

一.命名冲突

我们知道对于变量访问有以下几点规则:

1.先在本局部域中找

2.如果局部域没有,那么会在全局域中查找

3.如果指定了,那么就去指定域中找

注意:指定域本质上在全局域中

那么我们现在再讲一下各大域划分:

大概分为以下几种:

局部域/全局域/命名空间域/类域

请看下面代码:

#include <stdio.h>

int rand = 1;

int main()
{
	int rand = 0;
	printf("%d", rand);
	return 0;
}

我们都知道,上述代码结果为:0

那么我如果想问我想访问全局变量呢?

#include <stdio.h>

int rand = 1;

int main()
{
	int rand = 0;
	printf("%d", ::rand);
	return 0;
}

那么我们就可以这样写::表示域作用限定符

该作用符表示如果左边无限定域,那么就表示访问全局域
?

那么我们现在就来学习指定域吧!

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

?

那么我们现在就试试namespace吧~!

namespace cx
{
	int rand = 1;
}
namespace cx
{
	int rand = 1;
}

性质:????????

1.namespace命名可以重名,会在编译时进行合并

2.namespace命名内部的变量是不能重名的

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

4.命名空间可以嵌套

命名namespace的使用规则:

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

?

现在我们知道如何命名空间了,那么我们如何使用命名空间呢?

主要分为以下几种使用方法:

1.加命名名称空间和作用域限定符

#include <stdio.h>
namespace cx
{
	int rand = 1;
}
int main()
{
	printf("%d", cx::rand);
	return 0;
}

但是在平常练习中,这样写需要大量的功夫,所以我们有更简单的写法。

2.使用using将命名空间中某个成员引入

namespace cx
{
	int rand = 1;
}
using namespace cx;
int main()
{
	printf("%d\n", cx::rand);
	printf("%d\n", rand);

	return 0;
}

但是注意这种写法,需要放在命名空间后面!!!

3.使用using namespace 命名空间名称 引入

using namespce N;

这种写法通常简单书写所用,总之,第二种在平常最为常用。

最后,寒假一起加油,我们寒假死战C++,努力学到会一点点!

文章来源:https://blog.csdn.net/2301_79813267/article/details/135657381
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。