C++進階之一

來源:互聯網
上載者:User

標籤:C++   lamnda   


 

在實際工作中,發現大學C++教科書上的C++知識還不夠用,或者理解不夠深,為此這方面還得沖沖電。下面是簡單整理了以前不太熟悉的幾個點。

 

1.     構造和拷貝函數

l   賦值建構函式:T(T &)

l   賦值拷貝函數: operator = (T &)

l   移動建構函式: T(T &&)

l   移動拷貝函數:operator =(T&&)

 

一般如果類中有指標成員,建議 disable 掉賦值構造和賦值拷貝函數。而通常出於對效能最佳化的目的,可以使用移動建構函式和移動拷貝函數來減少冗餘拷貝。

舉例說明:

 

class T {

  T(int);

T(const T&);

Operator = (const T&);

T(const T&&);

}

 

int main() {

   T a = T(1);

   T && b = T(2);

}

上面T a 的初始化過程中,有一次構造一次拷貝;而T b就只有一次構造了。

 

2.     virtual

l   限定虛函數:virtual func(….) ;

l   限定純虛函數: virtual func(….) =0 , 抽象類別只有純虛函數

l   限定被繼承的基類,用作虛基類,避免子類擁有基類中重複的成員方法;

例如: class B: virtual A;

class C: virtual A;

class D: class B, class C; // 那麼D的對象中只有A的一份成員;

l   抽象類別的解構函式一定是虛函數(個人的理解是對於裡面的虛函數可能用到的資源是不定的)

 

3.     C++ 11 中的自動推斷變數類型auto 的使用

Auto 的使用極大地方便了列舉程式的使用,隱藏了枚舉的過程,舉例如下:

 

 Auto x1=3.1415169;

  Std::map<float, int> mymap;

For (auto it = mymap.begin; it != mymap.end(); it++) {

……

}

 

4.     C++ 匿名函數 lamnda 的使用

本質就是去類臨時函數定義時的名稱,通過【】代替。這種函數通常在一些演算法庫中的比較函數、判斷是否相等的臨時函數的定義中。

 格式如下:

  [capture](parameters)->return-type{body}

 

其中capture高速這個臨時函數,是否以及如何使用外部的變數,規則如下:

[]        //未定義變數.試圖在Lambda內使用任何外部變數都是錯誤的.  

[x, &y]   //x 按值捕獲, y 按引用捕獲.  

[&]       //用到的任何外部變數都隱式按引用捕獲  

[=]       //用到的任何外部變數都隱式按值捕獲  

[&, x]    //x顯式地按值捕獲. 其它變數按引用捕獲  

[=, &z]   //z按引用捕獲. 其它變數按值捕獲 

 

執行個體如下:

【】(int a, int b)->int (int z= a+b; return z);

 

5.     建構函式和解構函式執行的順序

具體規則如下:

l   如果對象的類型是global/static 等落在.data或者.bss段,那麼對於global的變數,先於main()函數執行構造;對於function domain的則在執行到的地方開始執行構造。解構函式按鏡像對稱的順序進行;

l   如果對象的類型是在棧上,在執行到代碼的地方開始構造,在範圍結束的地方析構;

l   如果對象的類型在堆上,根據顯式調用解構函式的順序執行;如果沒有顯式調用析構,在堆被系統釋放的時候調用解構函式;

l   對於多重繼承的情況,建構函式沿著從基類到子類的方向進行,而解構函式沿著相反方向執行。

 



C++進階之一

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.