看到该文的时候说明你已经提前去了解了关于std的一些基本内容,本文主旨在弄清楚std于头文件,以及作用域的问题
一、std命名空间是什么?
引入:先从日常入手,“using namespace std;”,using和namespace就不多介绍了,就是声明域和定义命名空间的关键字(不是说using就只有这一种用途),std嘛,就是命名空间的名字,只不过是官方定义的。我们一般会在一个.cpp文件中、头文件下面看到或使用,但这是它的一种域使用方式。
说了一串,那到底std是什么玩意?用途是啥?
首先,std其实和自定义的命名空间一样,它只不过是官方定义的命名空间,专门给官方专用的关键字、库函数、库类等服务,里面包含了库函数的定义、类的定义、各种各样官方使用的名字。
这个时候很多人会问:那头文件还拿来干嘛?那你想没想过为什么c++里面输入输出是cin、cout,而不是scanf、printf?当然,scanf、和printf也能用,但是为什么都用cout、cin?
命名空间的目的是为了避免命名冲突(但是个人感觉它还简化了一些c语言的操作,毕竟c++是面向对象),意思就是说我官方专用的一套名字、专有定义(如cin、cout)啥的都在里面,但是你这些个专有都是在头文件库之上的,就是你离开了头文件,找不到支撑它这个专有的实现,而且为了避免用户用的名字啥的和我官方用的一样,造成冲突,所以弄一个std。其实可以联想一下c语言里面关键字啥的不是禁止同名吗,c++就不一样,你可以同名,但是在我std所在作用域内就不能同名,有这个意味。并且只要你用了c++专属的东西,即使有了头文件,也运行不了,因为找不到你用的是啥。总结就是你用了c++的东西,头文件去支撑你用的东西,这些东西又是在std里,然后根据你std出现的作用域决定你能在哪个作用域里使用c++专属的东西。小声的说句话:给我的感觉就像套壳公司。
二、代码对比演示
很多时候是因为不动手所以不理解,我直接上代码!
①首先验证有没有std的情况:
这是有std,能使用cout
这是没有std,用不了cout,但是能用printf()
②再验证头文件没有是什么情况:
很好,用不了cout、printf()
通过①和②对比不难发现头文件和std必须都有才能用cout,printf()
③作用域对比:
很好,全局std能用cout
很好,fun函数能用cout,main函数用不了
经过以上对比就能明白上面文字说的什么意思了,到这该篇文章就结束了,希望能帮到您。
注:如果有专业级大神看出有问题,可以联系我进行纠错,希望能得到您的指点!