在标准(20.2.2 [utility.swap])中,为左值引用定义了std :: swap.我知道这是你想交换两件事的常见情况.但是,有时交换rvalues是正确和可取的(当临时对象包含引用时,如此处:交换引用的临时元组).
为什么没有rvalues超载?对价值进行无意义交换的风险是否超过潜在收益?
有没有合法的方法来支持交换包含引用的rvalue std :: tuple对象?对于用户定义的类型,我会专门使用swap来按值接受它的参数,但是对于像std :: tuple这样的库类型来说,这似乎没有犹豫不决.
不如创建一个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)
| 归档时间: |
|
| 查看次数: |
863 次 |
| 最近记录: |