小伙伴们为何一直不能理解那一行神奇的using namspace std;最直接的原因就在于它的名字命名空间,好了,进入正题:
千万不要被这个名字迷惑,所谓命名空间不是真有这么一个神奇的“空间“,这是个抽象的慨念;C++没有任何名为std的任何文档。下面说明命名空间是何方妖孽!
摘自<yvals.h>,不要深究这是干嘛的头文件,“……”为省略部分
------------------------------------------------------------------
1 /* yvals.h values header for Microsoft C/C++ */
2 ……
3 ……
4 /*NAMESPACE */
5 #if defined(__cplusplus)
6 #define _STD_BEGIN namespacestd {
7 #define _STD_END }
8 #define _STD ::std::
9 ……
10 ……
-------------------------------------------------------------------
第6,7行namespace std{#define _STD_END},namespace后面紧跟的std就是命名空间的名字。这时你就会想那如果不要std,随便起个名字又如何?这就对了!比如“小沈阳”是C++的创始人,为了纪念这样的牛人干脆咱们不要std,就用namespace xiaoshenyang{……},这样的话每次我们的程序开头就不是”using namespace
std;”而是“using namespace xiaoshenyang;“了,看到这儿你是否已经大彻大悟
紧接着,上面的_STD_END就是属于”std”这个明明空间了,而你所用的什么“cin”,“cout“啦,都是类似_STD_END那样定义的,为什么只用一个名字“std”呢?当然是为了统一管理啦,这个”std”就是所谓的“空间”,切记啊,它不是人类世界那样理解的实体空间哦!
这里重点帮助大家理解命名空间的含义,关于命名空间的其他功能,参见C++ Primer Plus(第六版)324页,以及C++ Primer(第五版)74页,我是小菜,不敢对两本神书妄加评论,但个人强烈推荐两本书一起看,体会两位大师不同的风格。