目的是什么:"使用命名空间"?

fre*_*low 17 c++ namespaces using-directives

有令人信服的论据反对 using namespace std,为什么它被引入语言呢?不using namespace破坏命名空间的目的吗?我为什么要写using namespace?是否有任何问题我不知道这是通过优雅地解决using namespace,也许是在using std::swap成语或类似的东西?

Unc*_*ens 21

首先,这是在命名空间中使用运算符重载的方法(例如using namespace std::rel_ops;using namespace boost::assign;)

简洁也是一个强有力的论据.你会很喜欢打字和阅读std::placeholders::_1,而不是_1?此外,当您在实用的风格写代码,你就可以使用对象的无数stdboost命名空间.

另一个重要的用法(尽管通常不导入整个命名空间)是启用依赖于参数的查找:

template <class T>
void smart_swap(T& a, T& b)
{
    using std::swap;
    swap(a, b);
}
Run Code Online (Sandbox Code Playgroud)

如果在与T相同的命名空间中某些类型的T重载了swap,则会使用该重载.如果您明确调用std::swap,则不会考虑该重载.对于其他类型,这可以追溯到std::swap.

顺便说一句,使用声明/指令并没有破坏命名空间的目的,因为在模糊的情况下你总是可以完全限定名称.

  • 就个人而言,我很喜欢"使用<X>"它的"使用命名空间<X>"我遇到了问题(有一些例外,比如rel_ops). (2认同)