有關初始化列表和建構函式賦值的區別

2021-10-08 21:36:29 字數 695 閱讀 2046

如下**所示,一種是初始化列表,一種是建構函式體內賦值

class

test

test

(int y)

private

:int x;

//const int age;

};

我們知道這兩個最後的效果是一樣的,那麼區別在**呢?過程肯定是不一樣的。

初始化列表不等同於函式體內賦值,先通過初始化列表給初始值,然後再執行函式體內的操作。

如果沒有顯示指明初始化列表,就會先按照預設值初始化一遍,再執行函式體內的操作。把賦值操作放在函式體內,相當於初始化了一次,賦值了一次,如果是基本型別還好,如果是一些複雜型別,那就比較影響效率.

測試:

我們進行如下所示的測試:

得到的結果如圖所示:

在賦值之前已經被初始化。

還有乙個最重要的原因!!!

如上,如果類內有乙個const常量 const int age而且沒有給初始化,那麼他是不允許被賦值,只能初始化,所以只能採取初始化列表的方法。

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

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

初始化列表和建構函式

const的資料成員和需要用初始化列表,不能用普通的建構函式體內部進行初始化,這稱為常資料成員。const 有常引用,常物件,常資料成員,常成員函式 棧區 記憶體由系統來分配和釋放 堆區 記憶體由程式設計師自己來分配和釋放的 全域性區常量區 區 方法 建構函式與類同名 建構函式沒有返回值 建構函式可...

C 建構函式初始化列表與賦值

c 類中成員變數的初始化有兩種方式 建構函式初始化列表和建構函式體內賦值。下面看看兩種方式有何不同。成員變數初始化的順序是按照在那種定義的順序。1 內部資料型別 char,int 指標等 class animal animal int weight,int height b函式體內初始化 priva...