C 列表初始化和在函式體內初始化的區別

2021-10-11 00:10:01 字數 292 閱讀 8148

在列表初始化中才算是真正的初始化,而在函式體內的實際上是賦值操作,給成員變數分配記憶體是在列表初始化中完成的。

明白了這點就可以明白兩點:

1.const變數的初始化只能在列表初始化中完成,因為在函式體內是賦值操作,我們不能對const變數進行賦值操作。

2.含有類物件的最好在列表初始化中完成,如果在函式體內進行賦值,實際上是在列表初始化中先呼叫了類物件預設建構函式,然後在函式體內呼叫了operator=賦值運算子。另外,若乙個函式沒有預設建構函式,並且不在列表初始化,那麼就會不能通過編譯。

初始化 1 預設初始化 列表初始化

初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...

建構函式初始化列表和初始化函式

其實並沒有所謂的初始化函式的概念,本文中的初始化函式只是說明在函式體內進行賦值。而初始化列表才是真正意義上的物件初始化。使用初始化列表效率會高一點。c 規定,物件的成員變數的初始化動作發生在進入建構函式本體之前。在建構函式體內只是賦值,並不是初始化。請看下面這個栗子 class base publi...

c 初始化列表

與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。struct foo 初始化列表 建構函式的兩個執行階段 從概念上來講,建構函式的執行可以分成兩個階段,初始化階段和計算階段,初始化階段先於計算階段 初始化階段 所有...