簡體   English   中英

用戶定義的默認構造函數效率較低嗎?

[英]Are user-defined default constructors less efficient?

幾天前,在閱讀標准C ++新聞時,我讀過有關C ++ 11中默認函數的帖子,在那篇文章中提到用戶定義的構造函數效率低於編譯器生成的函數:

用戶定義的默認構造函數的效率低於編譯器隱式定義的默認構造函數。

繼續閱讀,有一個例子,用戶定義的構造函數被標記為默認值,然后說:

顯式默認構造函數比手動編程的默認構造函數更有效。

我不明白這些斷言,所以我想知道:

  • 為什么用戶默認構造函數(或特殊成員函數)的效率低於編譯器隱式定義的那個?
  • 如何通過明確默認構造函數(或特殊成員函數)來提高效率?
  • 選擇默認構造函數(或特殊成員函數)以及效率如何影響此決策時必須遵循哪些指導原則?

我認為更好的說法是用戶定義的默認構造函數可能比生成的編譯器效率低。

例如,當它在內部生成默認構造函數時,編譯器可能能夠對用戶定義的構造函數進行假設和優化(會產生副作用)。

還要記住,用戶定義的默認構造函數可以執行完全不同的工作,默認構造其所有成員,從而導致效率降低(但也更正確)。 但是,在您提供的鏈接中似乎並非如此。

而且我們都知道,如果它是在互聯網上寫的,那一定是對的......等等,對嗎?

在我發現第一個效率較低的斷言的文章中,作者說實話。 雖然你似乎誤解了它 - 在例子中它指的是手工制作的ctor使用賦值。 沒有充分理由,反對二十年前的指導方針。

下一個例子,同樣的情況。 (作為一個實際的注釋,我將補充說,對於聲稱有優化的任何編譯器,我希望即使對於那個表單也有相同的組合輸出...)

我認為沒有理由為什么正確的手寫ctor會以任何方式與默認的不同,包括效率。 OTOH如果他們是相同的,為什么在地球上寫它? 我很高興編譯器能為我做到這一點。 最后我甚至可以通過以前無法控制的方式來控制它。 可以使用更多這樣的功能。 ;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM