有什么技巧/ Actor 可以让我做到这一点吗?
#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
之外,是否有一种方法可以完成该任务。
最佳答案
您可以定义一个辅助函数,与std::move
“相反”
template<typename T>
constexpr std::remove_reference_t<T> &stay(T &&t) { // perhaps "temporary" is a better name
return t;
}
在您的情况下,纯右值将具体化为绑定(bind)到右值引用的xvalue,这使我们可以构造引用同一对象的左值。
foo.swap(stay(getBar());
像往常一样,临时变量一直存在到完整表达式的末尾(到分号),因此这是安全的(假设 swap
不会尝试将引用保存在某处)。
关于c++ - 我想将对类型 T 的非常量左值引用绑定(bind)到类型 T 的临时变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62917251/