C++ 使用 std 和 boost 命名空间的最佳实践[重复]

2023-12-02

可能的重复:
您更喜欢 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(使用前将#替换为@)

C++ 使用 std 和 boost 命名空间的最佳实践[重复] 的相关文章

随机推荐