由于正确使用 std::swap 是:
using std::swap;
swap(a,b);
它有点冗长,但它确保如果 a,b 定义了更好的交换,它就会被选中。
所以现在我的问题是为什么std::swap
不使用这种技术实现所以用户代码只需要调用std::swap
?
所以像这样(noexcept
为了简洁而忽略和限制):
namespace std {
namespace internal {
template <class T> // normal swap implementation
void swap(T& a, T& b) { // not intended to be called directly
T tmp = std::move(a);
a = std::move(b);
b = std::move(tmp);
}
}
template <class T>
void swap(T& a, T& b) {
using internal::swap;
swap(a,b);
}
}