[C++] 在類的函數聲明之後,“default”是什麼意思?


Answers

這是一個新的C ++ 0x功能,它告訴編譯器創建相應構造函數或賦值運算符的默認版本,即為每個成員執行複製或移動操作的運算符。 這很有用,因為移動構造函數並不總是默認生成(例如,如果您有自定義析構函數),與復制構造函數不同(同樣也適用於賦值),但如果沒有不重要的地方寫,最好讓編譯器會處理它,而不是每次都自己拼出來。

另請注意,如果您提供任何其他非默認構造函數,則不會生成默認構造函數。 如果您仍然需要默認構造函數,則可以使用此語法讓編譯器創建一個。

作為另一個用例,有幾種情況下不會隱式生成複制構造函數(例如,如果您提供了自定義移動構造函數)。 如果你仍然想要默認版本,你可以用這個語法來請求它。

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

Question

我已經看到在類中函數聲明旁邊使用的default 。 它有什麼作用?

class C {
  C(const C&) = default;
  C(C&&) = default;
  C& operator=(const C&) & = default;
  C& operator=(C&&) & = default;
  virtual ~C() { }
};



在這些答案中沒有提到的另一個用例是,它很容易讓您更改構造函數的可見性。 例如,也許你想讓一個朋友類能夠訪問拷貝構造函數,但是你不希望它公開。