亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

編譯器為類創建的所有成員函數是什么?這種事經常發生嗎?

編譯器為類創建的所有成員函數是什么?這種事經常發生嗎?

C++
有只小跳蛙 2019-10-12 11:07:27
編譯器為類創建的所有成員函數是什么?這種事經常發生嗎?編譯器為類創建的所有成員函數是什么?這種事經常發生嗎?就像破壞者一樣。我關心的是它是否是為所有類創建的,為什么需要默認構造函數?
查看完整描述

3 回答

?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

C+98/03

如果需要的話,

  1. 編譯器將生成一個

    默認構造函數

    除非您聲明了您自己的任何構造函數。
  2. 編譯器將生成一個

    復制 構造器

    除非你宣布屬于你自己。
  3. 編譯器將生成一個

    復制 賦值算子

    除非你宣布屬于你自己。
  4. 編譯器將生成一個

    破壞者

    除非你宣布屬于你自己。

正如Péter在一篇有幫助的評論中所說的,所有這些都是由編譯器生成的。當他們需要的時候..(區別在于,當編譯器無法創建它們時,只要不使用它們,就可以了。)


C+11

C+11添加以下規則,對于C+14也是如此(托利的信用額,見本評論):

  • 編譯器生成

    移動 構造器

    如果
    • 沒有用戶聲明。

      復制 構造器

      ,和
    • 沒有用戶聲明。

      復制 賦值算子

      ,和
    • 沒有用戶聲明。

      移動 賦值算子

    • 沒有用戶聲明。

      破壞者,

    • 它是

      標記為

      刪除,

    • 所有的成員和基地

      可動.

  • 類似于

    移動 賦值算子

    如果沒有定義用戶,則生成
    • 沒有用戶聲明。

      復制 構造器

      ,和
    • 沒有用戶聲明。

      復制 賦值算子

      ,和
    • 沒有用戶聲明。

      移動 構造器

    • 沒有用戶聲明。

      破壞者,

    • 它是

      標記為

      刪除,

    • 所有的成員和基地

      可動.

請注意,這些規則比C+03規則更詳細,在實踐中更有意義。

為了更容易地理解上面提到的項目是什么Thing:

class Thing {public:
    Thing();                        // default constructor
    Thing(const Thing&);            // copy c'tor
    Thing& operator=(const Thing&); // copy-assign
    ~Thing();                       // d'tor
    // C++11:
    Thing(Thing&&);                 // move c'tor
    Thing& operator=(Thing&&);      // move-assign};

作為進一步的閱讀,如果您是C+初學者,請考慮不需要您實現最后五個中的任何一個的設計,即a。零規則 (由馬蒂尼奧·費爾南德斯).



查看完整回答
反對 回復 2019-10-13
?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

你是指“被創造”的“定義”嗎?

$12.1-“默認構造函數(12.1)、復制構造函數和復制賦值操作符(12.8)和析構函數(12.4)是特殊的成員函數。

如果“創建”意味著“定義”,那么下面是C+標準中的重要部分。

-當類用于創建類型(1.8)的對象時,隱式地定義類的默認構造函數。

-如果類沒有用戶聲明的析構函數,則將隱式聲明析構函數。隱式聲明的析構函數在用于銷毀其類型的對象時被隱式定義。

-如果類定義沒有明確聲明副本構造函數,則將隱式聲明副本構造函數。如果隱式聲明的副本構造函數用于從類型的對象或從類型派生的類型的副本中初始化類型的對象,則隱式聲明的副本構造函數是隱式定義的。

-如果類定義沒有明確聲明副本賦值操作符,則將隱式聲明一個副本賦值操作符。當為類型的對象分配類型的值或從類型派生的類型的值時,隱式聲明的副本賦值運算符將被隱式定義。



查看完整回答
反對 回復 2019-10-13
?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

默認情況下,如果用戶不實現,編譯器將向類添加一些成員函數。它們被稱為“四大”:

  • 默認構造函數
  • 復制構造函數
  • 復印操作員(作業)
  • 破壞者

根據成員的類型和列出的成員函數您自己提供的,這些將不會全部生成。



查看完整回答
反對 回復 2019-10-13
  • 3 回答
  • 0 關注
  • 491 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號