昨天敲代码遇到一例子,3.13再论命名空间,后来问芋头关于命名空间的理解,结果悲剧的更迷糊了!
书中简述:“文件开头并非总是放置using namespace std;这一行代码的最佳位置,我们最终要使用更多的命名空间,而非仅仅是std 。事实上,我们甚至要在不同的函数定义中使用不同的命名空间。”
“就3.13这个例子而言,相对于将using namespace std;放置在开头,区别仅仅在于编程风格。但随着你开始使用更多的命名空间,就会发现它最终将影响程序的运行。”
后来返回前面基础再看了一次,感觉还是不太明白,于是乎上MSDN找了下关于对namespace的解释:
Jimt200010 :
c++中,namespace 只是用来方便区分不同的代码段而已,没什么实际的效果。到了.net中,namespace被强化,成为所有模块甚至全局的命名符号。
就c++而言,小型项目中很少有用namespace的,理由是不需要用。在大型项目中,就有必要用一下了。
namespace主要功能是区分不同代码,以免混淆或者冲突。大项目中,对函数和类等命名的时候难免有冲突,比如cutstr、findxxx等基础函数,都是全局函数,放到一起编译的时候肯定会出错,这里就要用namespace了。
比如有两个namespace :name1 和 name2 ,name1里定义了cutstr,name2里也定义了cutstr,这样就没有问题了,在name1范围内(用 using name1来指定,或者包含在name1范围内)的cutstr就是name1里定义的cutstr,name2里的就是用name2里定义的cutstr。如果要指明用哪个,可以用 name1::cutstr 的方式来指定具体的某一个。
这样的话,每个独立的项目模块都放到一个namespace中,就不会跟其他模块产生任何冲突了;最后只要实现定义好的接口就行了。
比如:
看了这例子才弄清楚关于namespace的简单理解,再看看昨晚芋头给我的解释觉得差不多就这个意思:
忽忽,继续看书!!!