【问题标题】:Using namespace::function is better than prefixing namespace:: in every call?使用 namespace::function 比在每次调用中添加前缀 namespace:: 更好?
【发布时间】:2023-03-25 22:30:02
【问题描述】:

同意using namespace XXX 不是一个好习惯。然而,在每次通话中加上 namespaces:: 前缀不仅乏味,而且有时也很烦人。例如,看看下面使用标准命名空间std的代码

#include <iostream>

int main()
{
    std::cout << "Hello World" << std::endl;
    return 0;
}

但是,我可以通过 using 关键字 as 导入函数本身来摆脱重复 std::

#include <iostream>
using std::cout;
using std::endl;
int main()
{
    cout << "Hello World" << endl;
    return 0;
}

是否有任何具体原因我不应该这样做,而不是在所有语句中添加 std:: 前缀。如果没有具体原因,为什么不提倡这种方法而不是前缀std::

我从 C++ 规范中了解到using std::func 也会导入重载定义。

【问题讨论】:

标签: c++ namespaces


【解决方案1】:

使用命名空间限定的主要原因是避免名称冲突,例如本地名称distancestd::distance 冲突。

避免限定的主要原因是代码更短,而且对于一些程序员(包括我)来说,看起来更清晰,因为它只是读成英文。

名称冲突的问题随着代码的大小而增加,因此这是一个标准:代码越短,增加开销以避免名称冲突的意义就越小。反之亦然,代码库越大,构建时间越长,就越有理由避免名称冲突。

一个主要规则:

永远不要在头文件的全局命名空间中添加毯子 using namespace...

但除此之外,这是一个所谓的工程决策:根据您对优势、成本、丑陋、可读性和清晰度等的直觉。

【讨论】:

    【解决方案2】:

    你是否使用

    using namespace std;
    

    using namespace std::cout;
    using namespace std::end;
    

    如果它位于 .cpp 文件中,则无关紧要。由此产生的任何名称冲突都可以在本地修复。

    当涉及到头文件时,反对使用它们的人非常强烈。

    我不会太担心 .cpp 文件中的任何一种方法

    【讨论】:

      猜你喜欢
      • 2016-05-11
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 2017-04-14
      • 1970-01-01
      相关资源
      最近更新 更多