是`使用命名空间foo;`没用?

Avi*_*ity 0 c++

假设我有一个库,它将所有声明放在命名空间中foo.然后我可以通过添加以下内容方便地使用库:

using namespace foo;
Run Code Online (Sandbox Code Playgroud)

到我的源文件.但是,如果foo(例如class foo::socket)中的任何无辜名称现在与全局命名空间名称(例如::socket())不明确.更重要的是,没有办法消除它们的歧义!看起来using namespace只对那些不与全局命名空间冲突的库有用,或者我错过了什么?

编辑:通过"消除歧义"我的意思是一次范围,而不是每个使用网站,这当然是可能的.

我想我们必须等待模块才能获得满意的解决方案.

Cur*_*ous 7

回答你的问题 - 这不是无用的,它会做你的想法.在某些情况下(就像我在下面描述的那样,它可以是可以接受的事情)

它确实可以使名称含糊不清,在导入整个命名空间时必须非常小心,请参阅为什么"使用命名空间std"被认为是不好的做法?

例如,我通常只在像函数这样小的范围内导入整个命名空间

void func() {
    using namespace foo;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

绝对不要在实现文件的顶部执行此操作.直到你完全确定它不会引起任何冲突.