C 中的內建型別有預設建構子嗎?
儘管TC PL 中聲明內建型別有預設建構函數,C 03 上下文中的答案是細緻入微的「不。」
推理
內建型別沒有傳統意義上的宣告建構子。但是,可以使用類似於建構函式呼叫的語法來初始化它們。此初始化顯示為:
int x0(5); // Looks like a default constructor int x1{5}; // New syntax for default initialization
雖然這些表達式模仿構造函數調用,但它們實際上調用值初始化。值初始化是一種將基本類型初始化為其類型確定的預設值的機制。
初始化語法的意義
雖然內建型別缺乏明確建構函數,但初始化語法造成了預設建構函數的錯覺。這在零初始化的新語法中尤其明顯:
int z0 = int(); // Appears like a default constructor int z1 = int{}; // New syntax for zero-initialization
這些表達式的行為與預設建構子類似,將變數初始化為其預設值(在本例中為 0)。
Bjarne Stroustrup 的澄清
當就明顯的差異聯繫時TC PL,Bjarne Stroustrup 澄清,雖然內置類型沒有傳統意義上的構造函數,但從概念上講,它們根據其初始化行為被認為具有構造函數。
結論
在 C 03 中,內建型別在技術上不具有預設建構子。儘管如此,它們的初始化語法創建了此類構造函數的錯覺,允許它們像它們一樣被初始化。這種差異突顯了 C 初始化機制的細微差別及其語法的靈活性。
以上是C 內建型別真的有預設建構函式嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!