我只是想知道,为什么有人会写这个:
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!
我在这里忽略了哪些重要的差异/问题?
答案 0 :(得分:35)
来自SGI文档(here):
[1]严格来说,iter_swap是多余的。它只是出于技术原因而存在:在某些情况下,某些编译器难以执行解释swap(* a,* b)所需的类型推导。
答案 1 :(得分:10)
要回答第二个问题,using
+ swap
允许编译器使用可能比默认实现(使用ADL)更高效的用户定义交换函数。明确地说std::swap
禁止ADL以及它可能找到的任何自定义交换方法。
至于iter_swap
,它可能会在模板中使用并清楚地表明意图而不是交换,这可能表明你期望指针。