c++ - 使用 'using namespace' 而不是将实体嵌套到括号中是否正确?

标签 c++ namespaces

我和同事吵架了。

我们有一个类是一个命名空间的成员(它是另一个命名空间的成员,但我认为这在这里并不重要)。在头文件中,我们将类 block 嵌套到命名空间 block 中,如下所示:

namespace NS {
    class A {
        void method();
        // ...
    };
}

这是 .cpp 文件和我们争论的主题。我写道:

using namespace NS;

void A::method() {
    // ...
}

同事告诉我,我不正确地使用了'using'指令,我应该在这里使用与标题中相同的NS { ... }。 (他修改了代码并遇到了一些编译器错误,他只能通过删除 using 指令并用 NS { ... } 围绕代码来设法摆脱这些错误。)

我的观点是“using”只会影响名称查找,因此在 NS namespace 中查找 A,所以我的方法是正确的,他的编译器问题是由其他原因引起的,而不是由“using”指令引起的。

谁是对的,为什么?

补充:伙计们,请不要回答“我多次这样做(或那样做)”,这没有多大用处。我们在这里需要理论:为什么这种或那种方法是对的还是错的。

最佳答案

你的同事是对的,你应该用 namesapce 包装 cpp,这意味着你在 namesapce NS 中定义你的函数。

namespace NS
{    
  void A::method() 
  {
    // ...
  }
}

如果您有多个 A 可用,您可能会遇到名称查找冲突。

这里发生的危险事情是,在遇到 using 声明时,using 声明拍摄了 namespace NS 中名为 A::method 的任何实体的快照。

阅读 Google cpp style guilde关于命名空间,还有 101 c++ coding standards

关于c++ - 使用 'using namespace' 而不是将实体嵌套到括号中是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14617491/

相关文章:

oop - 缩短组件的 Coldfusion 命名空间

namespaces - 上下文和命名空间有什么区别?

c++ - 另一个 namespace 内的 'using namespace' 是否等同于别名?

c++ - to_string 函数追加零

C++ float 存储

C# 命名空间中的枚举与类中的枚举有什么区别

c++ - 在我的命名空间中公开外部库类时使用 typedef 或 using 关键字

c++ - 在 C++ 中遍历对列表的正确方法?

c++ - 创建与对话框一起工作的线程

c++ - 在没有读取权限的情况下返回大小文件c++