C++入门(命名空间和std)

本文介绍了C++中的命名空间概念,用于解决命名冲突问题。全局域和局部域决定了变量的访问优先级,而命名空间提供了一种隔离作用域的方法。std是C++标准库的命名空间,usingnamespacestd常用于引入标准库,但可能导致命名冲突,建议按需引入。
摘要由CSDN通过智能技术生成

对于初学C++的老铁来说,本文可以让你熟知C++中的命名空间和std的概念,希望对读者有所帮助。

目录

一、命名空间

1、全局域与局部域

2、命名空间域(namespace)

3、命名空间嵌套

4、命名空间的合并

         二、std


一、命名空间

我们都知道C++是从C语言发展来的,在C语言中经常会出现命名冲突的问题(库冲突and人与人),我们的祖师爷受够了这种冲突,所以定义了一个命名空间。

1、全局域与局部域

我们先来看下面一段代码

在上面的代码段中,定义了一个全局的a和一个局部的a,我们都知道局部变量优先,所以肯定打印的是局部a的值也就是5,但是如果我就想要访问全局的a怎么办呢?这个时候我们需要在a的前面加上::(域作用限定),这个符号可以访问全局的a

2、命名空间域(namespace)

在公司里项目都是多个人写的, 如果我是另外1个人,我也想定义一个a,我也想要用a这个名字,这个时候怎么办?这个时候就要用到命名空间(namespace)了。

命名空间会把里面定义变量的和外面的变量隔离开来,编译器是不会主动访问命名空间的。

如果我们想要访问命名空间里面的a如何访问呢?

a.在::(域作用限定)前面加上命名空间的名字即可访问

b.展开命名空间,展开命名空间之后就不需要指定访问了

 那么接下来就有个问题了,如果我创建了一个全局变量a,又把在命名空间创建了一个a,并且把命名空间展开了,会优先访问哪一个a?答案是会报错。

 为什么呢?因为展开的意思就是暴露到全局,也就是和全局冲突了,编译器也不知道访问哪个了,所以using namespace不要轻易去用,因为命名空间就是为了解决命名冲突,结果你把它暴露到全局那不就毫无意义了吗,我们从上面能发现一个什么结论呢?优先访问局部域,然后是全局域、展开命名空间或者指定访问域。

局部域->  全局域 -> 展开了命名空间域or指定访问域

3、命名空间嵌套

命名空间是可以嵌套的,并且如果两个命名空间里面定义相同名字的变量,这两个变量名是不冲突的。如果我们要访问命名空间里嵌套的命名空间如何访问呢?

4、命名空间的合并

如果我们在多个文件里面定义同一个命名空间,会自动合成一个命名空间。

 但是如果定义同名的变量,会发生冲突。

二、std

using namespace std;

有些人写C++的时候会写上面一段代码,那这个代码是什么意思呢?很显然,展开了名为std的命名空间,C++库里面的东西都在std这个命名空间里面,展开之后加上头文件才可以使用C++库里面的东西,但是我们把它们全都展开了好不好?答案是不好,因为这样容易发生命名冲突,所以我建议如果写项目不要全展开,指定展开。用什么展开什么,比如我要用cout就展开cout。

using std::cout;

在日常练习可以全部展开。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值