2017-02-25 106 views
0

學習C++上cppreference初始化我發現了以下(作爲值初始化「因爲C++ 11」):「沒有默認構造函數」一類型

1)如果T是沒有默認值構造一個類的類型或者使用用戶提供或刪除的默認構造函數,對象將被默認初始化; 2)如果T是一個具有既不是用戶提供也不是刪除的默認構造函數的類類型(也就是說,它可能是一個具有隱式定義或默認構造函數的類),則該對象是零初始化的然後如果它有一個不平凡的默認構造函數,它就會被默認初始化;

...

這意味着一個類類型可以有:

  • 沒有;
  • 用戶提供;
  • 刪除;
  • 隱式定義;
  • 默認;

默認構造函數。

「no」默認構造函數是什麼意思?類類型總是有一個至少隱式定義(或被刪除)?

回答

1

「no」默認構造函數是什麼意思?類類型總是有一個至少隱式定義(或被刪除)?

如果有用戶定義的構造函數,沒有隱式定義的默認構造函數(沒有參數)。

申報一個最簡單的方法是使用default關鍵字:

class MyClass { 
public: 
    MyClass(int y); // <<< No default constructor generated 
    MyClass() = default; // <<< Force generation of default constructor 
}; 
0

看到這個答案的隱含默認的解釋:https://stackoverflow.com/a/12340762/3616833

簡單來說,一個構造函數是默認的,如果它可以不帶參數地被調用。如果構造函數不是由用戶提供的,而是聲明/定義的,則隱含(已聲明/定義)構造函數。

如果所有的構造函數都需要至少一個參數,那麼仍然可以聲明/定義沒有默認構造函數的類。

default關鍵字創建默認的默認構造函數,因此不是OP問題的答案。

相關問題