簡體   English   中英

為什么我們需要一個const對象的用戶提供的構造函數?

[英]Why do we need a user-provided constructor for a const object?

該語言的規則表明, const ,用戶定義的類的定義需要進行值初始化或具有用戶提供的默認構造函數。

const struct X { int v; } x;

如果你不給它一個,那么你將永遠不會成為能夠給v的值,因為它不能突變。 但是我們如何從這樣的用戶提供的構造函數中受益:

const struct X { X() {} int v; } x;

這仍然是默認構造v ,這將使其保持未初始化狀態。 為什么我們需要這個構造函數來編譯,因為沒有一個沒有好處?

在第一種情況下,編譯器只能從類定義(不是任何成員的定義)告訴變量不會被初始化。 類定義必須是可用的,以便定義變量,因此,如果在這種情況下,如果const變量未被初始化,則可以很容易地說規則說程序是不正確的。

在第二種情況下,需要定義用戶聲明的構造函數來確定它是否已初始化。 當編譯器處理變量定義時,這不一定可用,所以通常它不能檢查構造函數是否初始化所有內容; 構造函數定義不一定可用。 通常情況下,即使在這樣的情況下也不需要診斷,其中構造函數的定義可用且編譯器可以解決它。

暫無
暫無

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

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