C 20 初始化列表的使用

2021-09-13 02:04:50 字數 1330 閱讀 6609

問題:類中是否可以定 const 成員?

下面的類定義是否合法?

如果合法, ci的值是什麼,儲存在**?

class test

;};

#include class test

int getci()

};int main()

輸出:

test.cpp:8: error: uninitialized member 『test::ci』 with 『const』 type 『const int』

test.cpp:10: error: assignment of read-only data-member 『test::ci』

class::classname() : m1(v1), m2(v1, v2), m3(v3)

#include class value

int geti()

};class test

};int main()

輸出:

value::value(int i), i = 2

value::value(int i), i = 3

value::value(int i), i = 1

test::test()

結論:成員的初始化順序與成員的宣告順序相同;

初始化列表先於建構函式的函式體執行。

發生了什麼?

建構函式的函式體執行前,物件已經建立完成。建構函式僅執行了物件狀態的 『初始化』 (實質為賦值完成,非真正意義的初始化)。初始化列表用於初始化成員,必然在類物件建立的同時進行,而非物件構造好了才進行的初始化。

編譯器無法直接得到 const 成員的初始值,因此無法進入符號表成為真正意義上的常量。

#include class test

int getci()

void setci(int v)

};int main()

輸出:

t.ci = 100

t.ci = 10

void code()

20 初始化列表的使用

注 部落格中內容主要來自 狄泰軟體學院 部落格僅當私人筆記使用。測試環境 ubuntu 10.10 gcc版本 4.4.5 一 問題 類中是否可以定義const成員?類中可以巨集定義const成員變數,只能通過成員列表進行初始化。二 小實驗 1 下面的類定義是否合法?如果合法,ci的值是什麼,存在在...

C 第20課 初始化列表的使用

本文學習自 狄泰軟體學院 唐佐林老師的 c 課程 物件的初始化是指 對正在建立的物件進行初始值設定,物件的初始化是通過建構函式實現的,建構函式中可以完成目標物件的初始狀態的設定,包括物件的成員變數的設定等等。但是通過建構函式設定的成員變數不是初始化,而是賦值,是對已經存在的變數進行賦值,並非我們所說...

c 使用初始化列表來初始化字段

includeusing namespace std class student1 student1 int i b i a b 異常順序 發現a的值為0 b的值為2 說明初始化僅僅對b有效果,對a沒有起到初始化作用 student1 int a,int b a a b b 正常順序 發現a b 2...