我想将类型 T 的非常量左值引用绑定到类型 T 的临时值
I want to bind a a non-const lvalue reference to type T to a temporary of type T
有 trick/cast 让我这样做吗?
#include <vector>
std::vector<int> getBar(){
std::vector<int> bar (5,200); // five ints with a value of 200
return bar;
}
int main ()
{
std::vector<int> foo (3,100); // three ints with a value of 100
foo.swap(getBar());
return 0;
}
在这个具体案例中
foo = getBar();
是一个很好的答案。我想知道除了 swap
采用非 const 引用之外,是否有其他方法可以完成该任务。
你可以定义一个辅助函数,std::move
的“相反”
template<typename T>
constexpr std::remove_reference_t<T> &stay(T &&t) { // perhaps "temporary" is a better name
return t;
}
在您的情况下,纯右值将具体化为绑定到右值引用的 xvalue,这让我们可以构造一个引用同一对象的左值。
foo.swap(stay(getBar());
像往常一样,临时文件一直存在到完整表达式的末尾(到分号),所以这是安全的(假设 swap
不尝试将引用保存在某处)。
有 trick/cast 让我这样做吗?
#include <vector>
std::vector<int> getBar(){
std::vector<int> bar (5,200); // five ints with a value of 200
return bar;
}
int main ()
{
std::vector<int> foo (3,100); // three ints with a value of 100
foo.swap(getBar());
return 0;
}
在这个具体案例中
foo = getBar();
是一个很好的答案。我想知道除了 swap
采用非 const 引用之外,是否有其他方法可以完成该任务。
你可以定义一个辅助函数,std::move
template<typename T>
constexpr std::remove_reference_t<T> &stay(T &&t) { // perhaps "temporary" is a better name
return t;
}
在您的情况下,纯右值将具体化为绑定到右值引用的 xvalue,这让我们可以构造一个引用同一对象的左值。
foo.swap(stay(getBar());
像往常一样,临时文件一直存在到完整表达式的末尾(到分号),所以这是安全的(假设 swap
不尝试将引用保存在某处)。