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?此外,当您在实用的风格写代码,你就可以使用对象的无数std和boost命名空间.
另一个重要的用法(尽管通常不导入整个命名空间)是启用依赖于参数的查找:
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.
顺便说一句,使用声明/指令并没有破坏命名空间的目的,因为在模糊的情况下你总是可以完全限定名称.
| 归档时间: |
|
| 查看次数: |
6385 次 |
| 最近记录: |