[英]Can't bind lvalue to rvalue reference
我有這個C ++測試代碼片段,
#include <vector>
class A {
std::vector<int> x;
public:
A(std::vector<int>&& _x) : x(_x) {}
};
class B {
A a;
public:
B(std::vector<int>&& _x) : a(/*move(*/_x/*)*/) {}
};
我將_x
作為右值引用傳遞給B,但是當它傳遞給A
的構造函數時它會轉換為左值,我必須使用std::move()
才能使它工作。 我的問題是為什么_x是左值而不是a()
的右值引用?
任何具有名稱的都是左值引用。 您必須使用std :: move on參數將它們作為右值引用傳遞。
引自WIKI
出於安全原因,會施加一些限制。 即使聲明了變量,命名變量也不會被視為右值。 要獲得rvalue,應使用函數模板std :: move() 。 Rvalue引用也只能在某些情況下修改,主要用於移動構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.