DevC 過載賦值運算子後型別不匹配的問題

2021-04-21 09:42:25 字數 1656 閱讀 3190

1樓:匿名使用者

vc++6.0編譯通過

不過確實有個地方有點不妥,加個&試試?

2樓:匿名使用者

= 需要復

你過載,不能直接用製,sample是你自己定義的類,運算子要自己過載,直接用=是不行的

ps:這次是我錯了,我沒注意看**,我只是給複製過去編譯了一下。dev c++是編譯通過不了,你按照lcability說的改下試試。。

3樓:永恆の星空

vc6編譯正常能使用。

沒有細看**,不過可能是編譯器問題……

ps:這位同學有自版

己寫的過載權啊

strcpy(s,ob.s);

return *this;

} 暫時理解為編譯器問題

c++中為什麼賦值運算子過載返回型別是引用

4樓:可以叫我表哥

一復、c/c++賦值運算子制的本意為「返回bai左值的引用」(左值:賦值號du左面的變數而zhi非其值)

例dao:

int a, b = 3, c = 2;

(a = b) = c;

cout<

對於a = b(a,b均為物件時),若不返回左值的引用,將會生成臨時物件。如果不處理a = b = c這樣的表示式,也會正常(只是會呼叫拷貝建構函式和析構函式處理臨時物件)。

二、為了進行連續賦值,即 x = y = z

1、賦值返回引用

x = y = z 先執行y = z,返回y的引用,執行x = y

2、賦值不返回引用

x = y = z 先執行y = z,返回用y初始化的臨時物件(注意臨時物件都是常物件),再執行x = y的臨時物件(要求operator=(const x&)  ),返回用x初始化的臨時物件(此處要求拷貝建構函式必須為x(const x&) )。

所以也並非必須返回引用,返回引用的好處既可以於賦值的原始語義已知,又可避免拷貝建構函式和析構函式的呼叫。

5樓:難得當歌對酒時

因為賦值操作會改變

bai左值,du而 + 之類的運算子不會改變操作zhi數,所以說賦dao值運算子過載要返回引

回用答以用於類似 (a=b)=c 這樣的再次對a=b進行寫操作的表示式。+ 返回乙個臨時物件是合情合理的 ,你若返回引用大多數情況下也不會出錯或導致某個運算元被意外修改,但這就使(a+b)=c這樣的表示式可以出現,這就有點不符合約定了,當然,你也可以讓 + 返回乙個常引用。

6樓:匿名使用者

不要一定非要是引用的,用引用是為了可以寫a+b+c這樣的連續表示式

返回的不是引用或指標則只能用於賦值

7樓:

這只是個協copy議,適用於所有賦值相bai關運算子,所有內建型別和標準庫du型別都這樣遵循,具zhi體可參考daoeffective c++ 第三版 條款10 令 operator= 返回乙個 reference to *this

8樓:再聯絡

markmarkmarkmark

為什麼賦值運算子只能作為成員函式進行過載,而不能作為友元函式

因為編譯器會提供乙個預設的賦值運算子,你如果把自己定義賦值運算子的寫成友元的話,函式的引數列表不一樣,不會發生過載 所以編譯器禁止了這種行為。c 規定 這四個運算子只能被過載為類的非靜態成員函式,其他 的可以被友元過載版,主要權是因為其他的運算子過載函式都會根據引數型別或數目進行精確匹配,這四個不具...

C中不能被過載的運算子中是什麼運算子高手們幫忙解決

是c 的類成員函式指標呼叫運算子,是用來呼叫乙個類函式指標的。舉例 假設有乙個專classa類擁有乙個成員函式void classa func int i 則可屬以這麼用 void classa fp int i 定義乙個類函式指標。classa obj fp classa func 給這個類函式指...

C語言賦值運算子,在C語言中11種賦值運算子的具體含義,用法

你宣告為 無符來號char,則運算會按無符號源處bai理。你宣告為有符號duchar,則運算會按有符號處zhi理。例如 unsigned char c char d c 376 d 376 printf c d d d n c,d 列印出 daoc 254 d 2 定義的意思是說這是無符號數,它可以...