专门为stval :: swap for rvalues

Ben*_*nes 6 c++ c++11

在标准(20.2.2 [utility.swap])中,为左值引用定义了std :: swap.我知道这是你想交换两件事的常见情况.但是,有时交换rvalues是正确和可取的(当临时对象包含引用时,如此处:交换引用的临时元组).

为什么没有rvalues超载?对价值进行无意义交换的风险是否超过潜在收益?

有没有合法的方法来支持交换包含引用的rvalue std :: tuple对象?对于用户定义的类型,我会专门使用swap来按值接受它的参数,但是对于像std :: tuple这样的库类型来说,这似乎没有犹豫不决.

How*_*ant 3

不如创建一个lvalue_cast将右值转换为左值的实用函数:

#include <tuple>
#include <iostream>

template <class T>
T&
lvalue_cast(T&& t)
{
    return t;
}

int
main()
{
    int i = 1;
    int j = 2;
    swap(lvalue_cast(std::tie(i)), lvalue_cast(std::tie(j)));
    std::cout << i << '\n';
    std::cout << j << '\n';
}
Run Code Online (Sandbox Code Playgroud)