[英]passing Rvalues into a copy constructor and assignment operator
在我看來,將Rvalue傳遞給復制構造函數或賦值運算符似乎是一件非常重要的事情。 例如:
int a = b+c;
要么
int a;
a = b+c;
沒有這個,將很難進行數學計算。
但是我無法在全班學習。 這是我的代碼
#include <iostream>
using namespace std;
struct node{
public:
node(int n){
node* ptr = this;
data = 0;
for (int t=0; t<n-1; t++){
ptr -> next = new node(1);
ptr = ptr -> next;
ptr -> data = 0;
}
ptr -> next = NULL;
}
node(node &obj){
node* ptr = this;
node* optr = &obj;
while (true){
ptr -> data = optr -> data;
optr = optr -> next;
if (optr == NULL) break;
ptr -> next = new node(1);
ptr = ptr -> next;
}
}
void operator=(node &obj){
delete next;
node* ptr = this;
node* optr = &obj;
while (true){
ptr -> data = optr -> data;
optr = optr -> next;
if (optr == NULL) break;
ptr -> next = new node(1);
ptr = ptr -> next;
}
}
~node(){
if (next != NULL) delete next;
}
private:
double data;
node* next;
};
node func1(){
node a(1);
return a;
}
void func2(node a){
node b(1);
b = func1();
}
int main(){
node v(3);
func1();
func2(v);
}
我收到此編譯錯誤:
expects an l-value for 1st argument
我該如何編寫一個既帶有r值又帶有l值的復制構造函數和賦值運算符?
謝謝您的幫助
您正在濫用復制控制器和賦值運算符來實現移動。 按照慣例,復制c'tors和賦值運算符會接收const
引用,該引用可以綁定到r值和l值。 但是,如果您想實現移動,請使用移動控制器和賦值運算符:
node(node&& n){ /* pilfer 'n' all you want */ }
node& operator=(node&& n) { /* ditto */ }
將移動語義與復制混淆在一起只會在以后造成麻煩。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.