可能的重复:
您更喜欢 C++ 中的显式命名空间还是“使用”?
我是一名 C# 开发人员,但我的朋友是一名 C++ 开发人员。他向我展示了充满了类似调用的代码std::for_each
and boost::bind
。我在 C# 中使用过,并认为使用指令会提高代码的可读性并且通常会加快开发速度。例如,在 C# foreach 语句之前键入任何命名空间都会很麻烦。
我想知道使用这种流行的命名空间有什么缺点和优点?
包含这些命名空间是否是最佳实践?
首先,我们先来区分两点:
1)有像这样的using指令using namespace std;
并使用类似的声明using std::cout;
2) 您可以将 using 指令和声明放入标头 (.h) 或实现文件 (.cpp) 中
此外,使用指令和声明将名称带入编写它们的名称空间中,即
namespace blah
{
using namespace std; // doesn't pollute the *global* namespace, only blah
}
现在,就最佳实践而言,很明显将 using 指令和声明放在头文件中在全局命名空间中这是一个可怕的禁忌。人们会因此讨厌你,因为任何包含该标头的文件都会污染其全局命名空间。
将 using 指令和声明放在实现文件中在某种程度上更容易接受,尽管它可能会或可能不会使代码变得不太清晰。一般来说,在这种情况下,您应该更喜欢使用声明而不是指令。我自己的偏好是始终指定名称空间,除非它太长(那么我可能会受到诱惑)。
在标头中,如果每次都输入名称空间变得非常乏味,您始终可以引入“本地”名称空间,例如
namespace MyLocalName
{
using namespace boost;
class X
{
// can use things from boost:: here without qualification
};
}
using MyLocalName::X; // brings X back into the global namespace
但从来不放using namespace boost;
或者等效的地方,它将把 Boost 中的所有内容拖到全局命名空间中供其他人使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)