在《inside the c++ object model》一書中談到copy constructor的構造操作,有三種情況下,會以乙個object的內容作為另乙個object的初值:
第一種情況: xx aa = a;
第二種情況: xx aa(a);
第三種情況: extern fun(xx aa); fun(a)函式呼叫
第四種情況: xx fun(); xx a = fun();函式返回值的時候
下面我們就上述的四種情況來一一驗證:
class classtest
classtest& operator=(const classtest &ct) //過載賦值操作符
classtest(const char *pc)
classtest(const classtest& ct)//複製建構函式
private:
char c[256];
};classtest func(classtest temp)
int main()
測試結果:
我們可以看到,比較複雜的是ct6和ct7,其中ct6還是比較好理解的,ct7這種情況比較難懂,為什麼會有兩個拷貝建構函式的呼叫????
第一次拷貝建構函式的呼叫:第一次很簡單,是因為函式引數的傳遞,將ct6作為引數傳遞給temp,用ct6的值初始化temp會呼叫拷貝建構函式;
初始化類物件
初始化類物件 趙湘寧問題 c 中如何初始化類中的表資料?在c語言中,我能像下面這樣初始化結構陣列 struct mystruct mystruct table etc 但是如果mystruct是個c 類,而不是結構,我編譯就會出錯。我覺得這是c 的乙個不足。解答 這個問題完全取決於你如何看待c c ...
C 初始化方式
變數被預設初始化由變數型別和定義變數的位置決定,如果內建型別定義的變數在任何函式體之外即全域性變數,則被預設初始化為相關型別的預設值,如int型預設值為0,如果定義的變數位置在任何函式體之內即區域性變數,則不被初始化,乙個未被初始化的變數是未定義的,將會報錯。如果使用等號 初始化乙個變數,實際上執行...
C 初始化vector物件的方式
初始化vector物件的方式 vectorv1 v1是乙個空vector,他的元素型別為t,執行預設初始化 vectotv2 v1 v2中包含v1所有元素的副本 vectotv2 v1 等價於v2 v1 vectotv3 n,val v3包含了n個重複的元素,每個元素的值都是val vectotv4...