C++命名空间剖析
2014-04-16 15:29
183 查看
小伙伴们为何一直不能理解那一行神奇的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页,我是小菜,不敢对两本神书妄加评论,但个人强烈推荐两本书一起看,体会两位大师不同的风格。
千万不要被这个名字迷惑,所谓命名空间不是真有这么一个神奇的“空间“,这是个抽象的慨念;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页,我是小菜,不敢对两本神书妄加评论,但个人强烈推荐两本书一起看,体会两位大师不同的风格。
相关文章推荐
- 听讲座笔记:国立交通大学《如何成功投稿国际科学期刊》 投稿准备+审稿流程剖析
- Nginx学习之十二-负载均衡-加权轮询策略剖析
- ExecutorService与Executors例子的简单剖析
- Android上下拉刷新控件原理剖析
- 接口深度剖析(子类没有重新实现)
- WCF技术剖析之十一:异步操作在WCF中的应用(上篇)
- Hadoop YARN配置参数剖析
- leveldb源码剖析---filter block
- LOTUS Note ID 剖析
- memcached全面剖析–2.理解memcached的内存存储
- 深入剖析 redis 数据结构 skiplist
- MapReduce shuffle过程剖析及调优
- Delphi剖析(转)
- memcached全面剖析—— 客户端选择(一致性哈希算法)
- JTHREAD剖析
- 系统剖析Android中的内存泄漏
- 全面剖析《自己动手写操作系统》的pmtest1.asm
- GDAL源码剖析(七)之GDAL RasterIO使用说明
- java多线程编程底层原理剖析以及volatile原理
- 剖析Vue原理&实现双向绑定MVVM