class test
test()
void print()
};
int main()
#include class test
test()
void print()
};int main()
輸出:
mi = 11341812
執行結果
究竟哪個地方出了問題?
定義私有的的可復用普通成員函式#include class test
public:
test(int i)
test()
void print()
};int main()
輸出:
mi = 0
#include class test
test(const test& t)
test()
void print()
~test()
};test func()
int main()
輸出:【g++】
test(int i) : 10
test(int i) : 20
mi = 10
mi = 20
~test()
~test()
分析:1. test t = test(10); 為什麼拷貝建構函式沒有被呼叫呢?
在古老的編譯器中,會發生如下過程:
a. 生成臨時物件(呼叫建構函式)
b. 用臨時物件初始化 t (呼叫拷貝建構函式)
2. test tt = func(); 為什麼拷貝建構函式沒有被呼叫呢?
在古老的編譯器中,會發生如下過程:
a. 生成臨時物件(呼叫建構函式)
b. 返回臨時物件,初始化 tt (呼叫拷貝建構函式)
使用臨時物件初始化物件,將額外產生一次拷貝函式的呼叫,c++ 編譯器為了避免效能損失,在不影響最終執行結果的前提下,盡力減少臨時物件的產生。
test t = test(10); ==> test t = 10;
test tt = func(); ==> test tt = test(20); ==> test tt = 20;
23 神秘的臨時物件
注 部落格中內容主要來自 狄泰軟體學院 部落格僅當私人筆記使用。測試環境 ubuntu 10.10 gcc版本 4.4.5 一 有趣的問題 1 下面的程式輸出什麼?為什麼?例項分析 23 1.cpp include class test test void print int main 操作 1 g...
C 中神秘的臨時物件分析
include class test test void print intmain 1 程式意圖 在test 中以0作為引數呼叫test int i 將成員變數mi的值初始化設定為零 2 執行結果 成員變數mi的值為隨機值1 直接呼叫建構函式將產生乙個臨時物件 2 臨時物件的生命週期只有一條語句的...
物件和類 神秘的臨時物件
本文參照於狄泰軟體學院,唐佐林老師的 c 深度剖析教程 通過函式傳遞物件產生的臨時物件 c 中有這樣一種物件 它在 中看不到,但是確實存在。它就是臨時物件!臨時物件是由編譯器定義的乙個沒有命名的非堆物件。主要是為了提高程式的效能以及效率,因為臨時物件的構造與析構對系統效能而言絕不是微小的影響,所以我...