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


南喵小鸡汤

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

一 . 命名空间的介绍


命名空间是一个声明性区域,为其内部的标识符(类型、函数和变量等的名称)提供一个范围。
命名空间用于将代码组织到逻辑组中,还可用于避免名称冲突,尤其是在基本代码包括多个库时。
命名空间范围内的所有标识符彼此可见,而没有任何限制。 命名空间之外的标识符可通过使用每个标识符的完全限定名(例如std::vectorstd::string vec;)来访问成员,也可通过单个标识符的 using 声明(usingstd::string) 或命名空间中所有标识符的 using 指令 (using namespace std;) 来访问成员。头文件中的代码应始终使用完全限定的命名空间名称。

二.命名空间的实际应用


1.为什么要有命名空间

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

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

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

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

		struct Node
	{
		struct Node* next;
		int val;
	};
}
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 来方便我们的学习,但是一定要小心它们之间的冲突.

总结

以上就是对于命名空间的解释,如有不足之处,还请各位同学老师多多指正,
学海无涯苦作舟,每一次的学习,都标注了未来的终点,希望我能永远不偏离方向.保持学习的初心

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值