c++ - 我想将对类型 T 的非常量左值引用绑定(bind)到类型 T 的临时变量

标签 c++ rvalue temporary const-correctness

有什么技巧/ 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/

相关文章:

c++ - 为什么 decltype(*this) 没有返回正确的类型?

database - session 是否比查询数据库更快?

c++ - 动态数组与 STL vector 的确切区别?

c++ - *.h 或 *.hpp 用于您的类定义

c++ - 使用坐标矩阵 (OpenCV/C++) 访问图像值

c++ - 为什么左值不能改变自己。左值用户的意思是什么?

c++ - 将左值引用绑定(bind)到右值引用?

c++ - 如何使用在函数中本地创建的对象而不将其复制到内存中?

Mysql使用临时

c - 返回指向 C 中临时对象的指针