c++ - c++中swap是如何实现的

标签 c++ metaprogramming

刚开始学习元编程,不知道swap的实现。 任何人都可以帮助我解释元编程中特征的概念吗?谢谢。

最佳答案

std::swap来自 <algorithm>作为模板实现,因此它可以交换任何给定类型的两个变量的值。它的原型(prototype)是这样的:

template <typename T> void swap(T& a, T& b);

典型的实现是将一个值保存在一个临时变量中,将第二个值复制到第一个变量中,然后将临时值放入第二个变量中。在 C++ 中,这涉及复制构造函数和赋值运算符。

对于大型对象,所有这些构造和复制都可能很昂贵。如此多的对象,包括大多数(所有?)STL 容器都有一个重载实现,它通过交换一些指针值来工作。交换指针非常快,并且避免了任何潜在的失败(比如在复制构造函数期间分配内存)。重载std::swap转发给成员函数(通常也称为 swap )。成员函数可以访问内部,因此它可以使用更有效的方法。重载可能看起来像这样(简化):

template <typename T> void swap<vector<T> >(vector<T>& a, vector<T>& b) {
  a.swap(b);
}

如果你想看真正的代码,你可以浏览std编译器和操作系统的头文件。

关于c++ - c++中swap是如何实现的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3900875/

相关文章:

rust - 使用 syn 时如何从 Option<T> 获取 T?

java - groovy 中 java 类的 metaClass 属性

c++ - 为什么我这里不需要SFINAE

c++ - 什么是 [in] 和 [out]?

c++ - 以排序方式插入节点时遇到问题

c++ - Clang 在 C++03 模式下支持哪些 C++11 扩展?

c++ - 在 C++ 中实现类型列表

c++ - 模板元编程问题

ecmascript-6 - 在 ES6 中通过 Proxy 捕获类定义

c++ - QuadTree 用于 2D 碰撞检测