C++中命名空间使用

类别:编程语言 点击:0 评论:0 推荐:
C++中命名空间使用 随着程序规模的扩大,命名冲突的问题越来越严重,在同一个程序甚至是一个程序的一个模块都会出现同名的情况,特别是那些多人开发的程序中这种情况更严重,为了解决这个问题,各种语言都有相应的措施比如:java中使用了”包”的概念,而C++使用了”命名空间”,而由于这儿讨论的对象只是针对C++的标准模板库,故只讨论命名空间,而java中的包的概念与命名空间类似,如果有兴趣可以参考java的书籍。标准库中的所有对象都在名为std的空间内,如果你要使用的话必须引入该空间,通过一下语句即可引入: using namespace std; 以后的代码即可随意使用该空间的函数,算法等,就好像在程序中自定义的函数一样,很多介绍使用C++标准模板库的书籍的例子程序大都使用这种方式,的确我承认这种方式很简单,但却有问题存在,请思考下面的情况: 一个稍微大点的程序往往会包含许多函数,这些函数的命名和参数类型很可能与标准库中的函数同名,如果出现这种情况的话,你程序中的函数就会屏蔽标准函数库中的函数,但你却认为是在使用标准库中的函数,于是忘了使用std::作用域分辨符,这样的话你程序会编译通过,但会出现了潜在的错误。举个例子如下: 假设标准库中有一个函数原型为bool isOk(int x)的函数,它的作用是判断x是否为素数,如果是则返回真否则返回假,而你程序中也定义了一个这样原型的函数,但它的作用却是判断该数的范围是否在[0~100],如果是就返回真,否则返回假。现在在你的程序的很多地方都需要要使用标准库中的isOk函数来判断是否为素数,但你可能会由于“我已经使用using namespace std语句引入了std空间”的想法而直接使用了isOk函数,你本来的意图是要判断是否为素数,但现在却成了判断数的范围是否为[0~100],这样就与你的意图不符合而造成了潜在的错误,遗憾的是该程序会通过编译而使你的程序出现这样潜在的错误。 如何来解决这种潜在的错误了,我认为有两种: ① 使用using namespace std语句而直接使用标准库中的函数,但将你程序中自定义的函数都放在一个空间内,然后通过::作用域分辨符来使用自定义函数 #include using namespace std;//引入std命名空间 namespace zqSpace //定义自己的命名空间 { bool isOk(int x) { if (x100) { return true; } return false; } } //--------------------------------------------------------------------------- int main(int argc, char* argv[]) { int tempNum=133; if (zqSpace::isOk(tempNum)) //使用作用域分辨符使用自己定义的函数 { cout

本文地址:http://com.8s8s.com/it/it25948.htm