C++系列-命名空间

🌈个人主页:羽晨同学 

💫个人格言:“成为自己未来的主人~”  

 命名空间

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

首先,我们先来看C语言当中的一端代码

#include<stdio.h>
#include<stdlib.h>
int rand = 10;
int main()
{
	printf("%d", rand);

	return 0;
}

在这段代码当中,我们引用了stdlib.h这个库文件,所以,rand是一个函数,存在于全局作用域当中,同时,我们又定义了一个rand的变量,也存在于全局作用域当中,所以,这二者会产生冲突,从而导致发生错误。

 

这个便是C++当中namespace的优点所在,namespace这一个关键字,后面接命名空间的名字,然后后面加一对{}即可,{}当中的代码均属于这个命名空间。

我们来看看使用namespace之后的效果是什么

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
namespace bit
{
	int rand = 10;
	
}
int main()
{
	printf("%d", rand);

	return 0;
}

大家可以猜一下打印的结果是什么

 

我们可以看到,打印出来的就是一个随机数,而不是我们赋值给的10,而且此时程序也不会进行报错,这个就是namespace的作用,namespace单独开辟了一个空间,而里面的rand便被隔离,

那问题来了,我们怎么样可以用到namespace中的内存数据呢

#include<stdio.h>
#include<stdlib.h>
namespace bit
{
	int rand = 10;
	
}
int main()
{
	printf("%d", bit::rand);

	return 0;
}

这样子,我们就打印到了namespace当中的数据

::这个,叫做作用域限定符

除了这种方式之外,我们还可以采用其他的方式来完成我们的目的,

使用using将namespace中的某个变量展开,比如:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
//namespace bit
//{
//	int rand = 10;
//	
//}
//using bit::rand;
//int main()
//{
//	printf("%d", rand);
//
//	return 0;
//}

namespace bit
{
	//命名空间中可以定义变量/函数/类型
	int a = 0;
	int b = 1;
	int Add(int left, int right)
	{
		return left + right;
	}
	struct Node
	{
		struct Node* next;
		int val;
	};
}
using bit::b;
int main()
{
	printf("%d", b);
	return 0;
}

在这段代码当中,我们通过展开命名空间的某个变量的方式将b打印了出来,但是我们只是展开了b,这个时候是不能打印a的

 

会出现报错的情况。

将整个命名空间进行引入

我们以上面的那个代码作为例子

using namespace bit;
int main()
{
	printf("%d", b);
	printf("%d", a);
	return 0;
}

这样子,我们既可以打印a,也可以打印b

接下来我们说几个其中的问题

首先,命名空间中的优先级是较高的(在指定的情况下)

 

 

局部变量的优先级最高(在非指定的情况下) 

另外,需要注意的是,当命名空间展开后,变量的作用域和全局变量的作用域是相互冲突的

 

 好了,这个就是我们关于C++的命名空间的全部内容了,我们下一篇再见

相关推荐

  1. c++ 命名空间 匿名命名空间

    2024-04-27 18:16:03       64 阅读
  2. C++(1) 命名空间

    2024-04-27 18:16:03       52 阅读
  3. C++命名空间详解

    2024-04-27 18:16:03       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-27 18:16:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-27 18:16:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-27 18:16:03       87 阅读
  4. Python语言-面向对象

    2024-04-27 18:16:03       96 阅读

热门阅读

  1. 大模型实战:提示工程 2—基本概念和格式说明

    2024-04-27 18:16:03       35 阅读
  2. frida安装以及使用

    2024-04-27 18:16:03       34 阅读
  3. Typescript学习笔记

    2024-04-27 18:16:03       41 阅读
  4. 构建二叉树搜索树算法题总结(第三十天)

    2024-04-27 18:16:03       30 阅读
  5. 第二十六篇-Ollama-监听本地IP与端口

    2024-04-27 18:16:03       38 阅读
  6. C++: string类的模拟实现

    2024-04-27 18:16:03       33 阅读