首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iter_swap的意义何在?

iter_swap的意义何在?
EN

Stack Overflow用户
提问于 2012-12-21 22:26:44
回答 2查看 2.2K关注 0票数 37

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

代码语言:javascript
复制
std::iter_swap(i, k);

而不是这个?

代码语言:javascript
复制
std::swap(*i, *k);   // saved a few keystrokes!

然后我研究了iter_swap的实现,当然它只使用swap而不是std::swap,因为我们已经在namespace std中了。这就引出了下一个问题:

为什么会有人写这样的话:

代码语言:javascript
复制
using std::swap;
swap(a, b);

而不是这个?

代码语言:javascript
复制
std::iter_swap(&a, &b);   // saved an entire line of code!

这里有没有什么我忽略的重要差异/问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-21 22:28:41

从SGI文档(here):

严格地说,iter_swap是冗余的

1。它的存在只是出于技术原因:在某些情况下,一些编译器很难执行解释交换(*a,*b)所需的类型推导。

票数 37
EN

Stack Overflow用户

发布于 2012-12-21 22:37:26

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

至于iter_swap,大概是为了在模板中使用,并清楚地表明意图,而不是交换,这可能表明您希望得到一个指针。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13991909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档