簡體   English   中英

具有一個默認參數的構造函數

[英]constructor with one default parameter

假設我有一堂課

class C {
       C(int a=10);
};

為什么我打電話

C c;

構造C(int =10)被調用,如果我調用

C c();

默認的構造函數叫做? 如何避免這種情況? 我只想執行我的構造函數,我試圖將默認的構造函數設為私有,但這是行不通的。

  1. 實際上, C c(); 應該被解析為函數聲明 為了顯式調用默認構造函數,您需要編寫C c = C();
  2. 定義任何構造函數后,編譯器將不會為您的類型提供默認構造函數 ,因此無法調用任何構造函數。
  3. 由於可以使用一個參數調用構造函數,因此它用作隱式轉換函數。 您應該考慮使其explicit ,以防止隱式轉換在意外的時刻發生。

代碼C c(); 沒有按照您的想法做:

它聲明了一個名為c的函數,該函數不帶任何參數並返回C 相當於

C c(void);

這是因為c()被解釋為名為c的函數。 C()將觸發C類的適當構造函數

暫無
暫無

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

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