我和同事吵架了。
我们有一个类是一个命名空间的成员(它是另一个命名空间的成员,但我认为这在这里并不重要)。在头文件中,我们将类 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/