2 回答

TA貢獻(xiàn)62條經(jīng)驗 獲得超31個贊
根本原因是,**右值** 不可以綁定到 **非 const 左值引用**
你這里,ClassA a = b + c;
a是左值,b + c 是計算表達(dá)式,它是右值。它只可以綁定到 const 左值引用,或者右值引用(或者說通用引用)。
你這里沒有形參與之匹配的構(gòu)造函數(shù)。
以下兩個都可以:
classA(const?classA?&a);???//?拷貝構(gòu)造函數(shù) classA(classA?&&a);????????//?移動構(gòu)造函數(shù)
return?classA(_number?+=?a._number);
這句也一樣,classA(number += a._number) 沒有問題,它調(diào)用構(gòu)造函數(shù),但是return,返回的是一個臨時變量,臨時變量是右值。所以它根本return不出來。定義上面任意一個就可以解決了。
(PS,如果把+重載返回定義為右值引用,return是沒有問題了,但是return的右值要拷貝/移動給對象a,又會面臨同樣的問題)

TA貢獻(xiàn)2條經(jīng)驗 獲得超1個贊
因為你已經(jīng)聲明了一個復(fù)制構(gòu)造函數(shù),所以系統(tǒng)不會產(chǎn)生一個默認(rèn)的復(fù)制構(gòu)造函數(shù),而你寫的復(fù)制構(gòu)造函數(shù)括號中是帶const的,所以你調(diào)用的時候也要帶上const,你刪掉整個復(fù)制構(gòu)造函數(shù)(這樣系統(tǒng)就會產(chǎn)生一個默認(rèn)的復(fù)制構(gòu)造函數(shù))或者你寫的復(fù)制構(gòu)造函數(shù)中的const就不會報錯了,一起學(xué)習(xí),一起進(jìn)步
- 2 回答
- 0 關(guān)注
- 2431 瀏覽
添加回答
舉報