C 自定義類通過操作符過載後 為什麼和內建型別的後 略微不同?

時間 2021-05-05 18:54:47

1樓:pansz

你的理解和實現沒問題。自定義類只能實現到這個程度。原因你自己也說了。

不過,同一條語句中多次引用同乙個變數同時存在自增自減的情況是未定義行為(UB)。

因此具體編譯器實現為賦值之前加還是賦值之後加都是對的。

你也不應該依賴未定義行為來程式設計。換句話說根本不應該寫出x=x++這樣的語句。

2樓:采薇東籬下

class MyInt ;

int main()

結果輸出

1011

1211

10這應該就是你要的自定義類過載把。

如果你想用字尾的方式就是你題目中說的,表示式的值就是他本身,但是執行表達時候,本身值+1這種情況需要在函式中制定乙個偽引數(我也不知道叫啥),類似於佔位符的東西,函式MyInt operator++(int);中的int就是這種東西。

int main()

// 輸出

1010

1112

11現在字首字尾都有了,嗯嗯。自定義型別的所有符號都需要過載之後使用……以上就是全部答案,下面是那幾個函式的宣告,如果需要可以看一下。

MyInt &MyInt::operatorm_int;

return *this;

}MyInt &MyInt::operatorm_int;

return *this;

}MyInt MyInt::operator++(int)MyInt MyInt::operator--(int)std::

ostream &operator<<(std::ostream &out, const MyInt &d)

3樓:

不要胡思亂想的,是你自己的過載函式寫的不對。

要想語義正確,前自增/自減的過載函式裡必須是先做自增/自減操作,然後返回自身的引用。

後自增/自減的過載函式裡必須先備份自己操作前的狀態,做完自增/自減操作後,返回操作之前的副本。

struct

FooFoo

operator++(

int)

};唉,發現好多 C++ 的課程,包括我當時學校裡的課,講到自增自減的過載的時候,往往只會強調前後自增過載時的區別(就是函式引數裡多乙個 int 少乙個 int 的)。考試也只考這麼乙個知識點,根本就不談前後自增怎麼過載才能實現正確的語義。像函式返回引用這個知識點都沒講,很多人甚至都不知道 C++ 的函式能返回引用,前自增過載當然就不可能寫對了。

django可以自定義使用者模型類嗎?

神洛官人 如果不想用AbstractUser的話,可以考慮繼承AbstractBaseUser 後者相對來說比較乾淨。這個基類僅有少部分由於Django機制,而設定的函式和常量。如果連這個都不想繼承的話,直接用自定義,這將有可能導致其餘的Django元件無法正常工作。當然無論是繼承還是自定義,都必須...

C 的new操作符,底層使用的是malloc嗎,在析構時,是如何確定自己需要釋放記憶體的大小的?

很有型 說c new底層呼叫malloc,說法不是很嚴謹。但是,new底層的記憶體分配原理機制肯定是和malloc一樣的,只不過在第一步記憶體分配完成後會在第二步對這塊記憶體做建構函式的呼叫以及預設變數的初始化等,其實第一步是可配置的,也就是說c 物件的建構函式不一定要分配新的記憶體,可以通過傳入一...

求問c 跨庫(dll)呼叫vector 自定義結構體 該怎麼寫?

張三瘋 vector只能用於內部實現,不能在介面中呼叫 如有可考慮用C實現,如傳入乙個指標的指標,然後在內部分本配記憶體,將資料複製過去,呼叫介面者要負責釋放記憶體,如釋放記憶體太複雜,則提供乙個釋放記憶體的函式以供使用者呼叫 ikkiz 別這麼幹!別這麼幹!別這麼幹!即使你非常明白會發生什麼能夠規...