目錄:
1、size_t的意義
size_t只是一個typedef,是C++計算個數時所使用的一種**不帶正負號(unsigned)**的類型,它也是vector/deque/string內的operator[]函數所接受的參數。因此,我們自己在重載[]的時候也應該遵循這個協議。
2、定義和聲明的區別
-
聲明就是告訴編譯器某個東西的"名稱和類型",但是略去了細節。
-
定義的任務是提供給編譯器一些聲明式所遺漏的細節:1) 對對象而言(包括基本數據類型的對象),定義是編譯器爲此對象分配內存的起點; 2) 對function或者function template而言,定義式提供了代碼本體; 3) 對class或者class template而言,定義式列出他們的成員。
3、explicit關鍵字的作用
- explicit只能用於修飾類內的構造函數
- 用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 往往更好。