C 編譯器會為你的類新增那些成員函式

2021-05-24 22:23:51 字數 1076 閱讀 4700

乙個空的c++類, 編譯器會給你做什麼?

如果你沒有如下函式, 體貼的編譯器會為你宣告它自己的版本:

乙個預設的建構函式, 乙個拷貝建構函式, 乙個析構函式, 乙個賦值運算子, 一對取址運算子. 例

: class empty{};

等價於:

class empty ;

我們**中是怎麼用的:

const empty e1; //

預設建構函式

// 析構函式

empty e2(e1); //

拷貝建構函式

e2 = e1; //

賦值運算子

empty *pe2 = &e2;//

取址運算子(非

const)

const empty *pe1 = &e1; //

取址運算子

(const)

c++編譯器對這些函式的實現:

inline empty::empty() {}//

預設建構函式

inline empty::~empty() {}//

析構函式

inline empty * empty::operator&() //

取址運算子 (非

const)

inline const empty * empty::operator&() const//

取址運算子

(const)

至於拷貝建構函式和賦值運算子, 官方的標準是:

對類的非靜態資料成員進行以"以成員為單位"逐一拷貝構造(賦值).

如:m是類c中的乙個型別為t的非靜態成員變數, 若c沒有宣告拷貝建構函式(賦值運算子),

m將會通過t的拷貝建構函式(賦值運算子)被拷貝構造(賦值)----------------t有拷貝建構函式;

規則遞迴應用到m的資料成員, 直到找到乙個拷貝建構函式(賦值運算子)或固定型別(例如:

int, double,

指標, 等)為止.

固定型別的物件拷貝構造(賦值)時是從源物件到目標物件的 "逐位

" 拷貝。

C 編譯器會為類新增哪些成員函式

乙個空的class在c 編譯器處理過後就不再為空,編譯器會自動地為我們宣告一些member function,如果你寫 class empty 就相當於 class empty 這是網上流傳的答案,而且在侯捷翻譯的中文簡體 effective c 2nd 有介紹 條款45 弄清c 在幕後為你所寫 所...

編譯器預設實現的類成員函式

以下幾種情況編譯會生成類成員函式情況如下 include include include 編譯器為我們實現了幾個類成員函式?class empty empty e empty b e empty d empty b d empty f b empty operator 取址運算子 const emp...

Linux下gcc編譯器和g 編譯器的那些事兒

使用c c 程式設計大約有三四個年頭了。最開始涉及到微控制器 嵌入式linux等,都使用的是c語言,那時主要寫linux驅動,甚至在arm板上寫linux應用程式時需要應用物件導向的思想的時候,都是使用c語言的結構體和函式指標來實現。當然,使用的編譯器自然就是gcc了。後來,慢慢的轉向了使用c 編寫...