Effective C++ 條款1

目錄:

  1. size_t的意義
  2. 定義和聲明的區別
  3. explicit關鍵字的作用
  4. 什麼時候用pass-by-value,什麼時候用pass-by-reference

1、size_t的意義

size_t只是一個typedef,是C++計算個數時所使用的一種**不帶正負號(unsigned)**的類型,它也是vector/deque/string內的operator[]函數所接受的參數。因此,我們自己在重載[]的時候也應該遵循這個協議。

2、定義和聲明的區別

  1. 聲明就是告訴編譯器某個東西的"名稱和類型",但是略去了細節。

  2. 定義的任務是提供給編譯器一些聲明式所遺漏的細節:1) 對對象而言(包括基本數據類型的對象),定義是編譯器爲此對象分配內存的起點; 2) 對function或者function template而言,定義式提供了代碼本體; 3) 對class或者class template而言,定義式列出他們的成員。

3、explicit關鍵字的作用

  1. explicit只能用於修飾類內的構造函數
  2. 用explicit關鍵字修飾構造函數可以禁止隱式調用構造函數,禁止類對象之間的隱式轉換。

例子:

class Int {
public:
	Int(int x) {
		cout << "constructor was called!" << endl;
	}
	~Int() {
		cout << "deconstructor was called!" << endl;
 	}
};

int main() {
	Int ii=4;	//相當於下面三條語句
	//Int temp(4);
	//Int ii=temp;
	//temp.~Int();
	return 0;
}

如果類Int中有指針變量的話,這種操作會非常危險。因此可以用explicit修飾類Int的構造函數,這樣的Int ii=4; 操作就會導致編譯錯誤。

4、什麼時候用pass-by-value,什麼時候用pass-by-reference

對於內置類型而言:pass-by-value通常比pass-by-reference高效(但是將會導致副本的出現),但是對於用戶自定義類型而言,由於構造函數和析構函數的存在,pass-by-reference-to-const 往往更好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章