Effective C++ 學習筆記 00 概述

Effective C++ 0 導讀

術語(Terminology)

1.聲明式(declaration):告訴編譯器某個東西的名稱和類型。忽略其中的細節。

extern int x; // object 聲明式
std::size_t numDigits(int number); // 函數(function)聲明式
class Widget;  //類聲明式

template <typename T> //模版(template) 聲明式
class GraphNode;

其中size_t只是一個typedef,是c++計算個數時的某種不帶正負號(unsigned)的類型。

2.定義式(definition):提供編譯器一些聲明式所遺漏的細節。對對象而言定義式爲編譯器爲此對象撥發內存的地點。

int x;
std::size_t numDigits(int number){
    std::size_t digitsSoFar = 1;
    while ((number/=10)!=0) ++digitsSoFar;
    return digitsSoFar;
}

class Widget{
public:
    Widget();
    ~Widget();

};
template <typename T>
class GraphNode{
    GraphNode();
    ~GraphNode();
};

3.explicit 聲明構造函數

explicit 聲明構造函數可以防止被執行隱式類型轉換(implicit type conversions),但是仍然可以用來顯式類型轉換。

class B{
public:
    explicit B(int x = 0,bool b = true);
};

被聲明爲explicit的構造函數通常比其non-explici更好。因爲禁止編譯器執行非預期的類型轉換。

4.copy 構造函數

copy構造函數用來“以同類型對象初始化自我對象”,通俗的說就是複製一份。具體實現如下:

class Widget{
public:
    int id;

    Widget(int id);

public:
    Widget();
    ~Widget();
    Widget(const Widget& rhs);
    Widget& operator=(const Widget &rhs);
    void printWidget();


};

Widget::Widget() {

}

Widget::~Widget() {

}
Widget::Widget(int id) : id(id) {}

Widget::Widget(const Widget &rhs):id(rhs.id) {  //copy構造

}

Widget &Widget::operator=(const Widget &rhs) {  //copy assignment 操作符
    id = rhs.id;
    return *this;
}

copy構造函數是一個重要的函數,它定義了一個對象如何passed by value.
通常來說以by value 傳遞用戶自定義類型通常不是很好的選擇,pass by reference to const 是更好的選擇。

5.其他

命名習慣方面 lhsrhs 爲二元操作符(binary operators
TR1 (Technical Report 1) 是一份規範,描述加入c++標準程序庫的諸多新機能。
Boost開源庫。

附錄

此後會寫一系列相關的c++學習專欄。推薦書籍《stl源碼刨析》 《Effective c++》等等。
相關代碼同步 github
歡迎關注互相交流學習。

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