什么是iter_swap点?(What's the point of iter_swap?)

2019-07-17 11:29发布

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

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!

是否有任何重要的差异/问题,我在这里可以俯瞰?

Answer 1:

从SGI文档( 这里 ):

[1]严格地说,iter_swap是多余的。 它的存在只是出于技术原因:在某些情况下,一些编译器有困难进行解释交换所需要的类型推演(* A * B)。



Answer 2:

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

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



文章来源: What's the point of iter_swap?