簡體   English   中英

為什么默認參數構造函數被稱為默認構造函數

[英]Why default argument constructor is called as default constructor

Class A {
public:
       A(int i = 0, int k = 0) {} // default constructor WHY ??
       ~A() {}
};
int main()
{
  A a; // This creates object using defined default 
       // constructor but the constructor still has two arguments
  A b(1,2); // Called as parametrized one
}

為什么這個默認參數構造函數是默認構造函數。 為什么它不被稱為參數化構造函數或默認參數化構造函數,因為即使在沒有參數的情況下調用此構造函數,它也確實包含兩個參數?? 是否有任何特定原因或僅僅是因為標准如此說明。

C++11 §12.1 構造函數

類 X 的默認構造函數是類 X 的構造函數,無需參數即可調用。

這是默認構造函數的定義。 為其所有參數提供默認參數的構造函數可以在沒有參數的情況下調用,因此符合定義。

根據定義,默認構造函數是可以不帶參數調用的構造函數。 您的顯然符合該定義,因為這兩個參數都有默認值。

“為什么”的答案是,我想說,僅僅是因為 C++ 標准是這樣說的。 要調用的構造函數的選擇是通過基於參數數量和類型的重載決議完成的,就像其他函數一樣。

構造函數重載的特性允許編譯器根據傳遞的參數推斷調用哪個構造函數。 默認構造函數只是沒有參數解析的構造函數,如

A a;

或者

A a=A();

再次由於參數重載,每個集合只能解析一個構造函數。 因此,如果所有參數都有默認值 => 可以調用 'A()' => 它是默認構造函數。

根據 c++ 標准,默認構造函數是可以不帶參數調用的構造函數。這也是您提出問題的原因。

暫無
暫無

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

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