乙個空的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 編寫...