effective c++學習筆記(1-6)

來源:互聯網
上載者:User

導讀:

關鍵字explicit

explicit   只對建構函式起作用,用來抑制隱式轉換。如:   
  class   A   {   
          A(int   a);   
  };   
  int   Function(A   a);       
  當調用   Function(2)   的時候,2   會隱式轉換為   A   類型。這種情況常常不是程式員想要的結果,所以,要避免之,就可以這樣寫:    
  
  class   A   {   
          explicit   A(int   a);   
  };   
  int   Function(A   a);       
  這樣,當調用   Function(2)   的時候,編譯器會給出錯誤資訊(除非   Function   有個以   int   為參數的重載形式),這就避免了在程式員毫不知情的情況下出現錯誤。

總結:explicit   只對建構函式起作用,用來抑制隱式轉換。

1.視C++為一個語言聯邦

(1)c

(2)object-oriented c++(c with classes)

(3)Template c++

(4)STL

c++究竟比C強大在什麼地方呢,(1)C++相容C,即C有的C++都有。(2)引入了類,即物件導向。(3)泛型程式設計。(4)模板庫,提高了編程的效率。

2.盡量用const,enum,inline替換#define

1)宏是代碼處不加任何驗證的簡單替代,而內嵌函式是將代碼直接插入調用處,而減少了普通函數調用時的資源消耗。
(2)宏不是函數,只是在編譯前預先處理階段將程式中有關字串替換成宏體。
(3)inline是函數,但在編譯中不單獨產生代碼,而是將有關代碼嵌入到調用處。
總結如下:
 對於一般常量,最好用const和enum替換#define;
 對於類似函數的宏,最好改用inline函數替換#define

3.儘可能使用const

(1)將某些東西聲明為const可協助編譯器偵測出錯誤用法;

(2)。。。

4.確定對象被使用前先被初始化

(1)內建類型使用前最好初始化,避免不必要的錯誤;

(2)建構函式初使化最好採用初值列而不要在建構函式本體內使用賦值操作

 CA::CA(int a,float b,string c):m_a(a),m_b(b),m_c(c){}//初值列初始化

CA::CA(int a,float b,string c):m_a=a,m_b=b,m_c=c{}//賦值初始化(仍會先調用初值,所以效率低)

5.瞭解C++默默編寫並調用哪些函數

(1)無參建構函式,但使用者一旦定義建構函式則系統不再提供;

(2)copy建構函式,如C c1; C c2(c1);

(3)copy assignment操作符
"=",如c2=c1;

(4)解構函式

6.若不想使用編譯器自動產生的函數,如何明確拒絕。

如每個對象都是獨一無二的,不允許對象間的copy構造和賦值。

(1)類中將copy建構函式和copy assignment聲明為私人。

(2)基類中將copy建構函式和copy assignment聲明為私人,衍生類別繼承基類即可。


ps:熱忱歡迎朋友們進行評論,對理解不足之處加以指點。



聯繫我們

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