為什麼C 預設初始化時,內建型別和類型別區別對待?

時間 2021-05-06 01:06:25

1樓:夏之幻想

使用value initialization 可以保證初等型別的值初始化為0,類型別呼叫無參建構函式,這樣它們的行為可以看成一致的了。

2樓:靈劍

其實沒有什麼區別啊,相當於基本型別的建構函式什麼都沒有做,類的建構函式如果你在預設函式裡面什麼都不做的話,也沒有哪個欄位會被自動初始化的,只有虛函式表之類的會被自動初始化。

同樣,定義乙個自動初始化的類作為標準型別的代替也不複雜:

class

MyInt

MyInt

(intv)

:_value(v

){}MyInt

(const

MyInt&b

):_value(b

._value){}

intoperator

int()

MyInt

&operator=(

intb

)...

private

:int

_value;};

主要是不自動初始化是個小事,一般你用 = 0的語法手工初始化一下就行了,陣列還可以用memset;如果你預設初始化了,你就沒法減掉這個額外開銷了。

3樓:陳碩

為了相容C。假如C++預設將內建型別成員初始化為0,那麼 C++ class 會比 C struct 慢,這就是原罪,沒人會買C++的賬,說不定會死在搖籃裡。

C 的類成員初始化 定義的時候寫 寫在初始化列表裡 寫在建構函式函式體中 有什麼區別?

jencol teng 首先,初始化順序是按照宣告順序初始化。其次,C 11之後,允許直接在類中初始化變數,C 11之前只有部分編譯器允許。其初始化效率和初始化列表一樣。重點 如果變數放在初始化列表,那麼在類初始化的時候,直接呼叫帶引數的建構函式初始化,而不是使用預設建構函式初始化。來乙個例子 cl...

c 類的建構函式初始化問題??

Right If you don t specify any constructors,the compiler will write one for you that doesn t take any arguments.This compiler generated default constr...

c語言字串陣列初始化時剩餘長度全部為 0 嗎?

C語言答疑課堂 我覺得題主的問題有三個地方需要回答 1.char abc abc 這種寫法是不指定陣列的大小,由編譯器來決定陣列的大小,而且會在初始化的字串的最後自動加上乙個 0 這種寫法的好處是,不用擔心初始化的字串會否超過陣列的長度。2.char abc 10 abc 這種寫法是指明了陣列的大小...