[Effective C++讀書筆記]005_條款05_瞭解C++默默編寫並調用哪些函數

來源:互聯網
上載者:User

其實這一點在C++的基礎類入門書,如C++ primer裡面也有說過,不過很少有人去注意而已,作者把這一點提出來,是為了提醒我們。

這一條款的內容如下:就是說當你書寫下面的【程式碼片段1】的時候,其實經過編譯器處理後,你所書寫的代碼本質上是【程式碼片段2】:

程式碼片段1(你親自手寫的):

1 class  A{2 3 };

程式碼片段2(編譯器幫你產生的):

1 class A{2 public:3     A() { ... }4     A(const A& rhs) { ... }5     ~A() { ... }6 7     A& operator =(const A& rhs) { ... }8 };

從上面可以看出來,編譯器為我們補充聲明了:

1. 無參建構函式

2. 拷貝建構函式

3. 解構函式

4. 賦值操作符=

在本條款中,作者又說明了另外一點,那就是關於賦值操作符=的建置規則,到底是產生呢,還是不產生呢?我們來看兩個例子:

 1 #include <iostream> 2 using namespace std; 3  4 class A{ 5 }; 6  7 int main(){ 8     A a1; 9     A a2;10     a1 = a2;11     return 0;12 }

結果:編譯運行成功!

 1 #include <iostream> 2 using namespace std; 3  4 class A{ 5 public: 6     int value; 7     const int constValue; 8     A(int v):constValue(v){} 9 };10 11 int main(){12     A a1(10);13     A a2(20);14     a1 = a2;15     return 0;16 }

結果:編譯失敗,提示“Error:沒有與這些運算元匹配的‘=’運算子”。

這說明了:

當類中有引用,常量定義時,編譯器不會為其產生‘=’運算子的函數。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.