【C++入门】命名空间详解(从零开始,冲击蓝桥杯)

C++入门 命名空间


南喵小鸡汤

程序员可以让步,却不可以退缩,可以羞涩,却不可以软弱,总之,程序员必须是勇敢的。

一 . 命名空间的介绍


命名空间是一个声明性区域,为其内部的标识符(类型、函数和变量等的名称)提供一个范围。

命名空间用于将代码组织到逻辑组中,还可用于避免名称冲突,尤其是在基本代码包括多个库时。

命名空间范围内的所有标识符彼此可见,而没有任何限制。 命名空间之外的标识符可通过使用每个标识符的完全限定名(例如std::vectorstd::string vec;)来访问成员,也可通过单个标识符的 using 声明(usingstd::string) 或命名空间中所有标识符的 using 指令 (using namespace std;) 来访问成员。头文件中的代码应始终使用完全限定的命名空间名称。

二.命名空间的实际应用


1.为什么要有命名空间

我们在使用变量时,通常会为他定义一个名字,在一般情况下,我们的命名极少与库里的函数起冲突.但是往往,一旦有了冲突,我们必须为自己所创建的变量重新命名.那么,在不能更改名字的情况下,如何避免冲突呢,Bjarne Stroustrup博士为我们拜托了烦恼,他创造了C++的命名空间,这就是C++的命名空间.

为了更直观的表达这一观点,我将用图片加注释的方法变现出来

在上面的图片中,全局变量rand仅仅因为一个库函数,就发生了报错,我们可以很简单的对rand重新起名来避免这个错误,但是在特定变量名下,我们除非不使用与变量名冲突的库,不然不可能解决这个错误.但在C++中,我们可以很轻松地解决它

命名空间不止如此

cpp 复制代码
namespace Moon
{
	// 命名空间中可以定义变量/函数/类型
	int rand = 10;
	int Add(int left, int right)
	{
		return left + right;
	}

		struct Node
	{
		struct Node* next;
		int val;
	};
}
cpp 复制代码
namespace N1
{
int a;
int b;
int Add(int left, int right)
{
return left + right;
}
namespace N2
{
int c;
int d;
int Sub(int left, int right)
{
return left - right;
}
}
}//命名空间还可以互相嵌套

同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中


2.展开命名空间

在引入这个观点的前提现,我们需要学习一下C++中输入与输出的方式,他们与我们在C中学习的有很大的区别.

cout

用于在计算机屏幕上显示信息,是C++中iostream 类型的对象,C++的输出是用"流"(stream)的方式实现的,流运算符的定义等信息是存放在C++的输入输出流库中的,因此如果在程序中使用cout和流运算符,就必须使用预处理命令把头文件stream包含到本文件中,即库,该库定义的名字都在命名空间 std 中,所以 cout 全称是 std::cout 。

cin

C++编程语言I/O流中的标准输入流,需要包含iostream头文件,即#include

cin代表标准输入设备,使用右移运算符 ">>" 从设备键盘取得数据,送到输入流对象cin中,然后送到内存。使用cin可以获得多个从键盘的输入值,其具体使用格式如下:

cin >> 表达式1 >>表达式2...>> 表达式n;

<< >>

C++的流是通过重载运算符 "<<" 和 ">>" 执行输入和输出操作。 输出操作是向流中插入一个字符序列,因此,在流操作中,将左移运算符 "<<" 称为插入运算符

虽然cout很方便,很好用,但是每次使用都需要声明std::,未免有些太过于繁琐,至此,我们引出了第二个概念 命名空间展开

using std::(关键字) 实际上就是告诉编译器,你类型是什么,在哪能找到。

常用的是using std,就是说用C++的标准名字空间。

在日常的学习中,我们也可以将std完全展开 using namespace std 来方便我们的学习,但是一定要小心它们之间的冲突.

总结

以上就是对于命名空间的解释,如有不足之处,还请各位同学老师多多指正,

学海无涯苦作舟,每一次的学习,都标注了未来的终点,希望我能永远不偏离方向.保持学习的初心

相关推荐
凡人的AI工具箱5 分钟前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang
做人不要太理性9 分钟前
【C++】深入哈希表核心:从改造到封装,解锁 unordered_set 与 unordered_map 的终极奥义!
c++·哈希算法·散列表·unordered_map·unordered_set
程序员-King.17 分钟前
2、桥接模式
c++·桥接模式
chnming198721 分钟前
STL关联式容器之map
开发语言·c++
进击的六角龙23 分钟前
深入浅出:使用Python调用API实现智能天气预报
开发语言·python
檀越剑指大厂23 分钟前
【Python系列】浅析 Python 中的字典更新与应用场景
开发语言·python
湫ccc31 分钟前
Python简介以及解释器安装(保姆级教学)
开发语言·python
程序伍六七34 分钟前
day16
开发语言·c++
wkj00139 分钟前
php操作redis
开发语言·redis·php
极客代码44 分钟前
【Python TensorFlow】进阶指南(续篇三)
开发语言·人工智能·python·深度学习·tensorflow