Hi~ o(* ̄▽ ̄*)ブ
目录
引言
本次我们将进入C++的学习,这节内容会详细介绍C++命名空间的知识。
正文
在刚开始学习C++的时候,我们最常见的代码是这样的
这个时候我们不禁要问,using namespace std是什么东西,它是干嘛用的?
要想解决这个问题,我们要从C++的起源说起。
当初C语言的大佬们在写实地工程项目时总是被一个问题所困扰,那就是对于一个庞大的工程项目来说是不可能1个人完成的,它必须分成几个板块才能完成,然而对于负责不同板块的人而言,他们的代码定义是不可能一样的,常常会出现这样一种情况:小王定义temp=0;小李定义temp=3;小强定义temp=‘a';那么当他们把代码合起来的时候就出现了同一个变量名对应不同的类型、数值的情况。在C语言中这样的问题是无法解决的,于是工程师们就想到用一种新的语言来解决这样的问题。
那他们是怎么解决的呢?工程师们想到既然每个人定义的不同,那么就让每个人在代码前加一个限定,这个限定就是命名空间。例如,我限定一个空间叫Happy,那么在这个空间内我就可以随便定义变量,定义temp=0;小郑也限定一个空间叫xiao,那么在xiao这个空间内,他可以随便定义,定义temp=3;这个时候即使我们两个人的代码和在一起也没事,如果要用到temp,那么你就得说清楚是happy里的temp还是xiao里的temp,这样解决了变量混淆的问题。
对于std来说,std:: 是个名称空间标示符,C++标准库中的函数或者对象都是在命名空间std中定义的,所以我们要使用标准函数库中的函数或对象都要使用std来限定。
所以现在你明白为啥每次写C++的时候都要带上 using namespace std了吧
命名空间的定义
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。
命名空间也可以嵌套
提问:若是命名空间也重复的话那该怎么办?
同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中
注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中
命名空间的使用
命名空间中的成员该如何使用呢?下图的使用方式对吗?
为什么会报错?我明明定义了a,怎么显示未声明?这就是我们的命名空间的影响,当你要打印a时,编译器会全局查找a,而你把a给限定在bitd 的空间内,就像是围起来一堵墙一样,不允许编译器进入,结果没找到。那么该如何解决?有3种办法:
1.加命名空间的名称及作用域的限定符
int main()
{
printf("%d",N::a);
return 0;
}
2.使用using将命名空间中的某个成员引入
using N::b;
int main()
{
printf("%d\n",N::a);
printf("%d",b);
return 0;
}
3.使用using namespace将命名空间名称引入
using namespace N;
int main()
{
printf("%d\n",a);
printf("%d\n",b);
return 0;
}
结语
总而言之,命名空间解决了”同名不同意“的问题,并且让空间中每一个变量都有自己的局限。我们在引用时要注意加以声明。
都看到这了不给个赞吗?
这份博客👍如果对你有帮助,给博主一个免费的点赞以示鼓励欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言欧👀。
好了我是happysky,编程之路你我一起探索,我们下期JAN