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

2021-10-02 11:00:22 字數 1083 閱讀 1359

以下幾種情況編譯會生成類成員函式情況如下:

#include

#include

#include

// 編譯器為我們實現了幾個類成員函式?

class

empty

;//empty e;

//empty b=e;

//empty d;

//empty b=d;

//empty f(b);

//empty* operator&(); //取址運算子

//const empty* operator&() const; //取址運算子(const版本)

//有預設建構函式、拷貝建構函式、析構函式、賦值語句、取址運算子、取址運算子(const版本)

// 編譯器為我們實現了幾個類成員函式?

class

anotherempty

:public empty

;//有預設建構函式、拷貝建構函式、析構函式、賦值語句、取址運算子、取址運算子(const版本)

//只是構造的時候會呼叫基類的建構函式

// 編譯器為我們實現了幾個類成員函式?

class

void};

//拷貝建構函式、析構函式、賦值語句、取址運算子、取址運算子(const版本),除了建構函式

// 編譯器為我們實現了幾個類成員函式?

class

notempty

private

:int m_value;};

//拷貝建構函式、析構函式、賦值語句、取址運算子、取址運算子(const版本),除了建構函式

//如果提供了自己的建構函式c++就不會實現預設建構函式

std::map<

int, notempty> m;m[1

]=notempty(10

);//出錯

//要求類必須有自身的預設建構函式,否則編譯報錯

//因為map會先查詢key=1,有則返回其值的引用;沒有,則預設插入乙個notempty,且用notempty的預設建構函式(這裡notempty沒有預設構造)

編譯器預設生成的函式

拷貝控制函式包括 拷貝建構函式 拷貝賦值函式 移動建構函式 移動賦值函式 析構函式。1.建構函式 如果我們沒有定義任何建構函式,編譯器會為我們生成乙個預設的建構函式。如果定義了,則沒有預設建構函式,即不能以class item來定義物件了。因此,不管有沒有定義建構函式,最好自己定義下預設建構函式。2...

C 中的空類,編譯器預設可以產生哪些成員函式

c 中建立乙個空類 class empty 缺省會生成4個函式,其函式的原型如下 public empty empty const empty rhs empty empty operator const empty rhs 說明 1 這些函式只有在需要呼叫的時候,編譯器才會生成。2 4個函式都是p...

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

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