從彙編看c 的預設operator 操作

2022-05-15 09:46:22 字數 779 閱讀 3833

在c++中,如果沒有定義operator=操作,編譯器會提供乙個預設的operator=操作。由於operator=操作和拷貝建構函式的功能類似,都執行拷貝操作。因此,編譯器也分提供無用的預設operator=操作和非無用的預設operator=操作。並且什麼時候提供非無用的預設operator=操作和無用的等操作的情形也和拷貝建構函式類似。(詳細分析過程請參考《從彙編看c++的預設拷貝函式》)

對於乙個類,編譯器會提供非無用的operator=操作的情形:

1 該類是含有虛成員函式(或者繼承的基類含有虛成員函式也屬於這種情況)

2 該類繼承自虛基類(不管虛基類又有定義operator=操作,編譯器為該類提供非無用的預設operator=操作)

3 該類繼承的基類自定義了operator=操作(如果基類沒有自定義operator=操作,但是編譯器會為基類提供非無用的預設operator=操作,也屬於這種情況。這就是說,只要基類有乙個非無用的operator=操作就行,不管這個非無用operator=操作是自定義的,還是編譯器提供的都行)

4 該類含有成員物件,該成員物件自定義了operator=操作(如果成員物件沒有自定義operator=操作,但是編譯器會為成員物件變數提供非無用的預設operator=操作,也屬於這種情況。這就是說,只要成員物件變數有乙個非無用的operator=操作,不管這個非無用的operator=操作是自定義的,還是編譯器提供的,都行)

並且,如果類自定義了operator=操作,編譯器只是負責呼叫,不會額外提供任何拷貝過程;對於編譯器提供的預設operator=操作,不管是無用的還是非無用的,都只執行淺拷貝。

從彙編看c 函式的預設引數的使用說明

在c 中,可以為函式提供預設引數,這樣,在呼叫函式的時候,如果不提供引數,編譯器將為函式提供引數的預設值。下面從彙編看其原理。下面是c 原始碼 複製 如下 int add int a 1,int b 2 int main 下面是mian函式裡面的彙編碼 複製 如下 4 int main xor ea...

從彙編code看C 的引用

今日在論壇上看到如下關於引用的code。我一直以為我對於引用很了解,直到膝蓋中了一箭。int val int ref int main 函式的彙編 如下 val函式返回變數i,直接把i放入eax。ref函式返回變數i的引用,把i的位址放入eax。區別和問題 int vv val int int 值傳...

從彙編的角度看棧

大家都知道,棧區是儲存函式,區域性變數的一塊記憶體區域。那麼讓我們從彙編的角度,來看看函式的執行過程。首先,當我們使用pushl將資料入棧時,棧頂會移動,以容納新增加的值。實際上,我們能不斷將值入棧,棧會在記憶體中保持向下增長,知道存放 或資料的地方。那麼,我們如何知道棧頂位址呢?棧暫存器 esp總...