C ++初阶:using namespace std你真的懂吗?

🍺0.前言

        言C++之言,聊C++之识,以C++会友,共向远方。各位博友的各位你们好啊,这里是持续分享C++知识的小赵同学,今天要分享的C++知识是C++初阶,在这一章,小赵将会向大家展开聊聊C++初阶。✊

相信很多人的C++都是从这两句代码开始的:

#include<iostream>
using namespace std;

很多人其实能读懂第一个头文件的意思吗,但要问他下面那个是什么意思,很多人便会面露难色,好了今天小赵就来带着大家一起去学习这块的知识。’

1.命名空间  

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

这个是什么意思呢? 

举一个简单的例子,就是你未来工作了,老板让你去完成项目的一个部分,让你的同事去完成项目的另一个部分,这本身没啥问题,你的那部分在你的电脑上运行完美,他的程序呢?在他的电脑上也能完美运行,可你们两的代码合到一起的时候,你发现编译器开始报错了。为啥呢,原来你两定义了同一个函数名,但这个时候你两的函数作用不同,这时候编译器就开始报错了。还有啥呢,你定义一个整型的a变量,他也定义一个,这个时候这两个a也打起来了,还有可能是结构体的名字等等,这个时候就很头疼了,你两谈的和气点,可能也能和和气气改完。你两要是都不想改,那还有可能打一架,毕竟一个项目的代码几百行谁乐意去改呢?而且这个情况以后该如何解决呢?好像都挺麻烦的。

其实除了这个问题还有一些函数的名字可能会和我们的变量命名一样,这样我们的程序也会报错。(可能会有一部分函数是我们不知道,包含头文件的时候可能让他成为了函数)

这个时候我们C++的祖师爷,为了解决C这个问题,就发明了命名空间这个东西。这个东西是用来干嘛的呢?就是我这个空间里的变量要用必须要在前面加上我的空间名字和访问符,这样就可以大大避免相同名字的问题了。(因为它代表的是那个命名空间里面的)

那具体是怎么解决的呢,那我们就得深入研究命名空间了。

1.1命名空间定义

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

例如的代码

namespace xz//开辟一个叫xz的空间域
{
    int x = 5;//设立变量
    int y = 6;
    int Add(int x, int y)//设立函数
    {
        return x + y;
    }
}

 那么这个时候我们的主函数再设立x实际上是与我们的命名空间的不一样

那么命名空间里面究竟可以存什么呢?其实就是变量,函数和类型(就是C语言里面的结构体)等,同时里面也可以嵌套命名空间

注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中  

1.2命名空间使用

那么我们这个时候如果我们想要调用我们设定的那个命名空间里面的x怎么办呢?

这里有三种方法

1.2.1加命名空间名称及作用域限定符

命名空间名称我们都知道像上面小赵就是取了一个叫xz的命名空间,那什么叫作用域限定符呢?就是::

这个时候我们发现我们的x用的就是命名空间里面的x了。  

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

 using在英语中的名字叫正在使用,我们用using+空间名加访问符+要访问的东西,那么就相当于在全局作用域中使用了这个局部域,就相当于这些域中的东西成了全局变量。

其实他就相当于

也就是把x从里面拉出来 

1.2.3使用using namespace 命名空间名称 引入

 using在英语中的名字叫正在使用,那么我们用using +namesapce+加我们定义的那个名字,就意味着将这个空间的东西给我们这个空间使用,那么在系统编译的时候就相当于把命名空间中的变量函数等放开给我们使用了。

这个就相当于:

 

其实这里面还有一个问题就是为什么我这个时候在主函数中定义一个x不会与外面的x冲突的问题。

 

 这里的原因其实很类似于,我在main里面调用一个函数,在那个函数里面定义了一个名字和main一模一样的变量,这个时候就会优先使用我们函数里面的,也就是局部变量会有限使用,如果没有局部变量,那就会使用我们的全局变量。

2.using namespace std

这个时候我们再看最开始的问题,其实答案就很明显了,这行代码其实访问的就是我们c++的标准域中的函数等东西,类似于我们c语言的#include<stdio.h>,而c++最前面的那个头文件其实是输入和输出相关的一个头文件,这个就留到我们的下一篇博客吧。

💎3.结束语

好了小赵今天的分享就到这里了,如果大家有什么不明白的地方可以在小赵的下方留言哦,同时如果小赵的博客中有什么地方不对也希望得到大家的指点,谢谢各位家人们的支持。你们的支持是小赵创作的动力,加油。

如果觉得文章对你有帮助的话,还请点赞,关注,收藏支持小赵,如有不足还请指点,方便小赵及时改正,感谢大家支持!!!

  • 77
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 59
    评论
回答: 引用\[1\]中提到了解决方法的两个方案。第一个方案是在代码中添加using namespace std;或者在vector前面增加std::来指定使用std命名空间。第二个方案是在代码中包含#include <vector>并在vector前面增加std::来指定使用std命名空间。这样就可以使用vector类了。\[1\] 引用\[2\]中给出了vector类的定义,它是一个模板类,使用数组实现的可变长度的顺序容器。\[2\] 引用\[3\]中介绍了vector类的接口,包括默认构造函数、填充构造函数、范围构造函数、拷贝构造函数和赋值重载等。还介绍了容量操作,如size()、capacity()、max_size()和resize()等。\[3\] 所以,根据引用\[1\]中的解决方法,你可以在代码中添加using namespace std;或者在vector前面增加std::来解决vector不是模板C/C++的问题。然后根据引用\[2\]和引用\[3\]中的说明,你可以使用vector类来创建可变长度的顺序容器。 #### 引用[.reference_title] - *1* [E0864 vector 不是模板的解决方法](https://blog.csdn.net/tcjy1000/article/details/125016954)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [C++初阶:vector](https://blog.csdn.net/yourfriendyo/article/details/123647112)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 59
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱编程的小赵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值