亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

類的函數聲明后的“默認”是什么意思?

類的函數聲明后的“默認”是什么意思?

C++
蝴蝶刀刀 2019-11-23 11:12:50
我已經看到default在類中的函數聲明旁邊使用過。它有什么作用?class C {  C(const C&) = default;  C(C&&) = default;  C& operator=(const C&) & = default;  C& operator=(C&&) & = default;  virtual ~C() { }};
查看完整描述

3 回答

?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

這是C ++ 11的新功能。


這意味著您要使用編譯器生成的該函數的版本,因此您無需指定主體。


您還可以= delete用于指定您不希望編譯器自動生成該函數。


隨著移動構造函數和移動賦值運算符的引入,生成自動版本的構造函數,析構函數和賦值運算符的規則變得相當復雜。使用= default和= delete使事情變得容易,因為您無需記住規則:您只需說出要發生的事情即可。

查看完整回答
反對 回復 2019-11-23
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

這是C ++ 0x的一項新功能,可告訴編譯器創建相應構造函數或賦值運算符的默認版本,即僅對每個成員執行復制或移動動作的版本。這很有用,因為默認情況下并非總是生成move構造函數(例如,如果您有自定義析構函數),這與copy構造函數(以及類似的賦值方法)不同,但是如果沒有什么不平凡的編寫,最好讓編譯器會處理它,而不是每次都自己拼出來。

還要注意,如果提供任何其他非默認構造函數,則不會生成默認構造函數。如果仍然需要默認的構造函數,則可以使用此語法來使編譯器合而為一。

作為另一個用例,在某些情況下不會隱式生成副本構造函數(例如,如果您提供自定義的移動構造函數)。如果仍然需要默認版本,則可以使用此語法進行請求。

有關詳細信息,請參見標準的12.8節。


查看完整回答
反對 回復 2019-11-23
?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

它是C ++ 11中的新功能,請參見此處。如果您定義了一個構造函數,但想對其他構造函數使用默認值,則它會非常有用。在C ++ 11之前的版本中,您必須定義所有構造函數,即使它們等同于默認構造函數。


還要注意,在某些情況下,不可能提供用戶定義的默認構造函數,該構造函數在默認和值初始化下的行為與編譯器綜合的行為相同。default使您能夠恢復該行為。


查看完整回答
反對 回復 2019-11-23
  • 3 回答
  • 0 關注
  • 612 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號