我只是在想,为什么会有人这样写:
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!这里有没有什么我忽略的重要差异/问题?
发布于 2012-12-21 22:28:41
从SGI文档(here):
严格地说,iter_swap是冗余的
1。它的存在只是出于技术原因:在某些情况下,一些编译器很难执行解释交换(*a,*b)所需的类型推导。
发布于 2012-12-21 22:37:26
为了回答你的第二个问题,using + swap允许编译器使用用户定义的交换函数,这些函数可能比默认实现更有效(通过使用ADL)。明确地说std::swap会禁止ADL和它可能找到的任何自定义交换方法。
至于iter_swap,大概是为了在模板中使用,并清楚地表明意图,而不是交换,这可能表明您希望得到一个指针。
https://stackoverflow.com/questions/13991909
复制相似问题