您的位置:首页 > 其它

不要在头文件中使用 using

2012-02-22 22:30 375 查看
命名空间是c++提供的一种机制,可以有效地避免函数名污染。然后在应用时要十分注意:任何情况下都不应在头文件中使用“using namespace xxx”这样的语句。

这是为什么呢?来看下面的例子,我们在命名空间ABC和XYZ中分别定义了一个sort函数,如下所示:

// 文件 abc.h
namespace ABC
{
void sort() { ... }
}

// 文件 xyz.h
namespace XYZ
{
void sort() { ... }
}

如果我们在一个头文件 data.h 中用到了命名空间 ABC 中的 sort 函数:

// 文件 data.h
#include "abc.h"
using namespace ABC;

void DoSomething()
{
// use sort() to do something
}

麻烦马上就要出现了!如果我们在另一个文件中同事用到了 data.h 中的 DoSomething() 和 xyz.h 中的 sort(),编译器就会报错:“error C2688: 'XYZ::‘sort’,对重载函数的调用不明确”。

#include "data.h"
#include "xyz.h"

using namespace XYZ;
int DataProcessing()
{
sort();
DoSomething();
}

这就是传说中的命名空间污染。

之所以会出现这个问题,是因为在包含头文件 data.h 的源文件中相当于也用了"unsing namespace ABC",而这样的命名空间引入是在不知不觉中完成的。

因此,最好不要在头文件里面使用“using names XXX”,而应该在声明时直接用全称。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐