C 對拷貝構造及預設成員函式的優化處理

2021-08-09 19:04:14 字數 1072 閱讀 2785

前面的部落格中,將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 這就是乙個簡單的類定義。下面依次介紹各個預設成員函式 一.建...