前面的部落格中,將c++的預設成員函式建構函式、拷貝建構函式、析構函式等簡單做了分析。在分析拷貝建構函式的時候有提到,傳參時必須傳引用,不能傳值,否則會發生無窮遞迴呼叫。詳見之前部落格《c++之--拷貝建構函式》。
那麼在c++之中,拷貝構造及相關建構函式我們會頻繁呼叫,那麼是不是說,每次呼叫,都要有棧幀開銷?
實際上,並不會,因為在實際的**執行時,編譯器會根據**情況,進行相應的優化,儘量減少相關函式的呼叫次數和棧幀的開銷。
那麼,接下來,我們來看看,c++中是如何針對各種不同的情況進行優化的。**如下:
#includeusing namespace std;
class aa
~aa()
{}aa(const aa & a)
aa & operator=(const aa & a)
void show()
private:
static int x;
static int y;
static int z;
};int aa::x = 0;
int aa::y = 0;
int aa::z = 0;
aa f(aa a)
void test1()
void test2()
void test3()
int main()
上面的三個測試**中,建構函式,拷貝建構函式,賦值運算子過載函式分別呼叫了多少次?
1、test1()
我們可以看到test1中,構造函式呼叫了1次,拷貝構造2次,賦值運算子1次,接下來分析一下:
通過上面的分析我們可以很容易發現test1()時,內部函式的呼叫情況。
2、test2()
執行結果如下:
分析如下:
3、test3()
程式執行結果:
分析如下圖所示:
通過上面的例題我們不難發現,當面對不同的情況時,編譯器會根據內部的具體呼叫來進行優化,減少重複工作,降低系統開銷,提高程式效率
一般而言,如果是連等式的話,編譯器便會進行相應的優化。具體的,則要因題而議。
C 預設成員函式
概念 object oriented programming,縮寫 oop 是一種程式設計范型,同時也是一種程式開發的方法。物件指的是類的例項,將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性 靈活性和擴充套件性。c 不是純物件導向語言,而是基於物件導向的語言 ps 因為它包含c的...
類的預設成員函式上(構造 析構和拷貝建構函式)
1.建構函式 2.析構函式 3.拷貝建構函式 4.賦值操作符過載 5.預設拷貝構造與賦值運算子過載的問題 6.const成員函式 7.取位址及const取位址操作符過載 在乙個空類中如果什麼成員都沒有,依然會有6個預設的成員函式 建構函式是乙個特殊的成員函式,名字與類名相同,建立類型別物件時由編譯器...
c 類的預設成員函式
類的組成包括資料成員與成員函式。在類中一共有有六個預設成員函式,建構函式 拷貝建構函式 析構函式 賦值操作符過載 取位址操作符過載 const修飾的取位址操作符過載 利用乙個例項 日期類 進行舉例 先是定義乙個日期類 class date 這就是乙個簡單的類定義。下面依次介紹各個預設成員函式 一.建...