37

我只是想知道,为什么有人会写这个:

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!

我在这里忽略了任何重要的差异/问题吗?

4

2 回答 2

37

来自 SGI 文档(这里):

[1] 严格来说,iter_swap 是多余的。它的存在仅出于技术原因:在某些情况下,某些编译器难以执行解释 swap(*a, *b) 所需的类型推导。

于 2012-12-21T14:28:41.153 回答
12

要回答您的第二个问题,using+swap允许编译器使用用户定义的交换函数,这可能比默认实现更有效(通过使用 ADL)。明确地说std::swap禁止 ADL 和它可能已经找到的任何自定义交换方法。

至于iter_swap它可能在模板中使用并清楚地表明意图而不是可能表明您期望指针的交换。

于 2012-12-21T14:37:26.357 回答