簡體   English   中英

無法將左值綁定到右值參考

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM