【发布时间】:2012-12-09 03:19:04
【问题描述】:
我只是想知道,为什么有人会写这个:
std::iter_swap(i, k);
而不是这个?
std::swap(*i, *k); // saved a few keystrokes!
然后我研究了iter_swap 的实现,当然它只使用swap 而不是std::swap,因为无论如何我们已经在namespace std 中了。这就引出了下一个问题:
为什么会有人写这个:
using std::swap;
swap(a, b);
而不是这个?
std::iter_swap(&a, &b); // saved an entire line of code!
我在这里忽略了任何重要的差异/问题吗?
【问题讨论】:
-
保存代码可能是值得的(降低复杂性更容易推理)...但是保存 行 代码?完全没用,往往适得其反。
-
不不不,你需要做
using std::iter_swap; iter_swap(i, k);因为iter_swap可能是专门的。 (开个玩笑。我想。) -
您已经研究了
iter_swap的一个 实现,但为什么您认为它不能用std::swap实现? -
@R.MartinhoFernandes 指定正确使用 ADL。 (17.6.3.2)
-
类似Q,更深入的回答:stackoverflow.com/q/14024228/153285
标签: c++ templates namespaces swap argument-dependent-lookup