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

2021-04-20 20:03:54 字數 777 閱讀 9213

1樓:平整土地

因為編譯器會提供乙個預設的賦值運算子,你如果把自己定義賦值運算子的寫成友元的話,函式的引數列表不一樣,不會發生過載;所以編譯器禁止了這種行為。

2樓:匿名使用者

c++規定=,[ ],(),->這四個運算子只能被過載為類的非靜態成員函式,其他

的可以被友元過載版,主要權是因為其他的運算子過載函式都會根據引數型別或數目進行精確匹配,這四個不具有這種檢查的功能,用友元定義就會出錯

3樓:宓清福文軒

好久不寫c++了,

我給你這個乙個思路

它是可以作為左值的,

所以需要return

*this;

這種形式返回引用

友元函式是沒有this指標的,對吧

賦值運算子返回的是必須引用型別,這個是關鍵!!!

所以,rt

4樓:

這應該是乙個規定吧。

我在乙個類裡過載了賦值運算子,把它宣告為類的友元, 編譯出錯:"operator ="必須是非靜態成員。

5樓:心心星亮

c++中 有四個操作符不能是全域性域中的過載,這四個操作符是:=, ->, operator[ ], operator()。

所以=的過載回不能宣告成類的友元答。而且函式operator=預設是靜態成員函式,所以只能訪問靜態資料成員

你沒貼**,我就舉個例子吧:

class a ;

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 定義的意思是說這是無符號數,它可以...

java中的賦值運算子怎麼用

賦值運算子的意思是將運算子右側的物件或者數值傳遞給左側的物件或者變數。基本的賦值運算子是 一開始可能會以為它是 等於 其實不是的。它實際上意味著把右邊表示式的值賦給左邊的運算數。賦值運算表示式的值也就是所賦的值。也就是說,a 3 的值是 3。擴充套件資料賦值運算將原變數的值拷貝到新變數中 傳值賦值 ...

JS運算子,js 運算子 是什麼意思

這是 js 指令碼的強大 經典 靈巧之處了。樓上的說的對,是這麼回事,再深入一層吧。運算了有什麼效果呢!運算遇到第一個true的時候就停止後面的表示式判斷了 這點很重要 物件作為運算子的時候呢,為 null 為false 上面的 的意思就是 fe 的值為空時 賦值為後面的值。還可以這麼寫fe fe?...