內建型別是否擁有預設建構子?
C 中的基本類型缺乏構造函數的概念一直是爭論的主題。該爭論源於對術語「預設建構函數」和內建類型的行為的錯誤理解。
預設建構子與值初始化
預設建構子是當沒有指定其他初始化方法時,初始化物件的成員變數的成員函式。有趣的是,內建類型表現出類似的行為,導致一些人假設預設構造函數的存在。然而,這個假設是不正確的。
內建型別:沒有建構子
原始型別沒有傳統意義上的明確建構子。相反,它們會經歷值初始化,這是一個為它們分配預設值的過程(例如,int 為零)。這個過程不是建構函式呼叫;相反,它是一種語言定義的操作。
語法和行為:模仿構造函數
C 11 中統一初始化語法的引入引入了使用以下方式初始化基本類型的能力通常用於構造函數的語法(例如int x{5})。這種語法造成了構造函數使用的錯覺,但它仍然是值初始化。
Bjarne Stroustrup 的澄清
C 的創建者 Bjarne Stroustrup 承認這種概念模糊。他建議內建類型“被認為具有構造函數”,因為它們具有類似構造函數的行為。
結論
總之,內建型別不具有建構子。擁有傳統意義上的預設建構函數。它們的初始化過程稱為值初始化,是一個模仿建構函數行為的單獨過程。 C 11 中引入的統一初始化語法進一步模糊了這種區別,導致一些人錯誤地將內建類型的行為歸因於預設構造函數的存在。
以上是內建 C 類型有預設建構函數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!