我知道using std::swap
通过ADL使用用户定义的swap
函数的技术,但我不知道这也应该应用于其他一些函数。例如,我在模板代码中写了一些std::abs
,我应该使用类似的东西:
template <class Int> void f(Int i) {
using std::abs;
Int j = abs(i);
// ...
}
您能想到哪种标准功能应该以这种方式使用?
旁注:当包含abs
时,g ++会将cstdlib
置于全局命名空间中(实际上ctsdlib
包含stdlib.h
(定义函数 abs
)并执行#undef abs
...),标准是什么意思?
答案 0 :(得分:1)
这来自标准:
3.4.6使用指令和命名空间别名
[basic.lookup.udir]
在using-directive或中查找namespace-name时 namespace-alias-definition,only namespace 名字被认为。
因此,您可以使用关键字using
将变量,类型和函数导入当前命名空间。
修改的
您可以将任何您喜欢的内容导入当前命名空间,但是您应该关注命名空间的压缩,因此尽量不要在标头中使用using
,而只能在源文件中使用{{1}}。
理想情况下,您不应该使用此关键字。我有时会使用深度嵌套的命名空间。