問題:類中是否可以定 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...