c – 为什么有这么多专业的std :: swap?

看看std::swap的文档,我看到很多专业化。
它看起来像每个STL容器,以及许多其他std设施有专门的交换。
我想借助模板,我们不需要所有这些专业化?

例如,
如果我写我自己的对,它与模板版本正确工作:

template<class T1,class T2> 
struct my_pair{
    T1 t1;
    T2 t2;
};

int main() {
    my_pair<int,char> x{1,'a'};
    my_pair<int,char> y{2,'b'};
    std::swap(x,y);
} 

那么从专业化的std :: pair中获得什么呢?

template< class T1, class T2 >
void swap( pair<T1,T2>& lhs, pair<T1,T2>& rhs );

我也想知道我是否应该为自定义类编写自己的专业化,
或仅仅依赖于模板版本。

So what it is gained from specializing std::pair?

性能。通用交换通常是足够好的(因为C 11),但很少是最优的(对于std :: pair,对于大多数其他数据结构)。

I’m also left wondering if I should be writing my own specializations for custom classes, or simply relying on the template version.

我建议默认依靠模板,但如果分析显示它是一个瓶颈,知道可能有改进的余地。过早优化和所有…

http://stackoverflow.com/questions/41984587/why-are-there-so-many-specializations-of-stdswap

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 为什么有这么多专业的std :: swap?