为了确定在后 C+11x 时代支持自定义版本的交换是否有意义,我想知道哪些标准函数调用交换,即使存在移动,它们是否仍会从用户实现的版本中受益-构造函数和移动赋值?
问问题
130 次
1 回答
2
我认为标准库不会调用您的交换函数,
标准库将在需要类型可交换swap
的地方调用您的实现,例如在. 除此之外,其他代码也可能使用您来实现自己的功能。对于这些情况,如果您已经实现了移动构造函数和移动赋值,那么标准实现应该但不是必需的(AFAIK)来使用移动构造函数/赋值。std::pair<>::swap
swap
swap
std::swap
已经实现swap
了移动操作的类型的实现是一个三行函数,所以我还是会继续实现它:
void swap(mytype& lhs, mytype& rhs) {
mytype tmp(std::move(lhs));
lhs = std::move(rhs);
rhs = std::move(tmp);
}
于 2013-07-10T15:08:58.477 回答