C++中命名空间使用

王朝c/c++·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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

//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 (isOk(tempNum)) //直接使用自己定义的函数

{

cout

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航