gpt4 book ai didi

c++ - 关于掉期执行的问题

转载 作者:可可西里 更新时间:2023-11-01 18:33:27 25 4
gpt4 key购买 nike

我有三个关于交换的问题,很可能对你来说很基础。

(1) 对于两个相同类型的STL容器ab,下面的两个操作都有效

swap(a,b);
a.swap(b);

据我所知,第二个专门用于容器(例如,只涉及一些迭代器交换),而第一个是全局算法,旨在处理通用数据类型并执行内部复制构造。

我的问题是,如果我写第一个,编译器会使用第二个,还是我必须小心检查是否存在适当的特化?

(2) swap(a,b) 会产生与 swap(b,a) 相同的性能吗?如果涉及复制构造并且对象的大小有很大不同,我怀疑这可能很重要?

(3) 在存在重载运算符== 并且相对较快的情况下,在交换之前检查a == b 是有意义的,以避免不必要的操作。 std::swap 是先应用这个检查,还是不顾一切地执行操作?

感谢您的宝贵时间!

最佳答案

  1. 全局swap 模板专门用于支持swap 的每个标准库类型;特化调用成员 swap

  2. swap(a, b)swap(b, a) 应该没有区别。 (我可以想象有悖常理的类型在什么地方很重要,但在实践中永远不会发生)。

  3. 不,std::swap 通常不检查是否相等。在许多情况下,这比仅仅进行交换要慢。

关于c++ - 关于掉期执行的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12302674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com