c++ primer 5

來源:互聯網
上載者:User

標籤:


使用者自訂的標識符不能連續出現兩個底線, 也不能以底線緊連大寫字母開頭。 此外,定義在函數體外的標識符不能以底線開頭。

((試過在g++ 和 vc都可以正常使用, 這些其實是編譯器自己的實現。))


引用只是別名, 

引用本身不是一個對象,所以不能定義引用的引用。(int &&rr = r; //error)

引用本身不是一個對象,因此不能定義指向引用的指標。(int &*p = &r;  //error)



const char* p = "abc";

std::cout << cast_cast<const void*>(p); 這樣才能輸出指標的值,否則預設輸出指向的字串。


預設情況下下, const對象僅在檔案內有效。如果想在多個檔案之間共用const對象, 必須在

變數的定義之前加extern關鍵字。

file1.cpp   extern const int bufSize = fcn();

file1.h extern int bufSize;


指標和constexpr (p60)

在constexpr聲明中如果定義了一個指標, 限定符constexpr僅對指標有效,與指標所指對象無關。

const int *p = nullptr;    //p 是一個指向整形常量的指標

constexpr int *q = nullptr;  //q是一個指向整數的常量指標


如果運算式的內容是解引用操作, 則decltype將得到參考型別。

decltype (*p) c; //錯誤, c是int&, 必須初始化。

decltype (&p) 的結果是 int**;

注意:decltype((v)) 的結果永遠是引用,而decltype(v)結果只有在v本身就是

一個引用的時候才是引用。


標頭檔不應包含using;它可能會被拷貝到其他引用它的檔案中,容易衝突。


difference_type 2個迭代器之間的距離。可正可負。

ptrdeiff_t\ size_t 定義在cstddef中。可正可負

要理解數組聲明的含義,最好的辦法是從數組名字開始按照由內向外的順序閱讀。(p103)


int *ip[4]; //整型指標的數組  ip是一個4個元素的數組,裡面放了都是int指標

int (*ip)[4]; //指向含有4個整數的數組  (ip是一個指標)指向有4個元素的數組,元素都是int型


常量對象,以及常量對象的引用或指標都只能調用常量成員函數。

explicit, 將之能以直接初始化的形式使用。


tie有2個重載版本,1不帶參數返回指向輸出資料流的指標,2版本接受一個ostream的指標,將自己關聯到此ostream。


容器中,如果元素類型沒有預設建構函式, 除了大小參數外,還必須制定一個顯式的元素初始值


std::array除了指定元素類型之外,還要指定容器大小。

std::array<int, 42> a;

std::array<int, 42>::size_type s;


erase 返回指向序列中的下一個元素。

insert 在給定位置之前插入新元素,然後返回指向新插入元素的迭代器。

對vector\string 等等容器插入、刪除都"容易"會引起迭代器失效!!

不要儲存 end();


fill_n(back_inserter(ivec), 10, 0);


lambda

[capture list] (param list) -> return type {function body}

=值捕獲、&引用捕獲。


ref(var); // 以引用的方式。。。


p426: 與unique_ptr不同, shared_ptr不支援直接管理動態數組,所以得自定刪除器。

shared_ptr<int> sp (new int[10], [](int *p) {delete []p;});

*(sp.get() + i) = n;


拷貝構造、 拷貝賦值運算子 的使用情境不同。

CA a = b;  //拷貝構造;

a = b;  //拷貝賦值運算子。

賦值運算子通常應該返回一個指向其左側運算對象的引用。


P516~P517頁的演算法不錯。


運算子多載:

前置++ -- ()

後置++ -- (int)  多了一個int來區分, 並不使用這個int,;-)


p490:

一元運算子有一個參數, 二元運算子有2個。對於二元運算子來說,左側運算對象傳遞給第一個參數,

而右側運算子傳遞給第二個參數。

如果一個運算子函數是成員函數, 則它的第一個(左側)運算對象綁定到隱式的this。

因此,成員運算子函數的(顯式)參數數量比運算子的運算對象總數少一個。



class CA final : public CBase {};

p535 如果在基類中含有一個或多個虛函數, 可以使用dynamic_cast請求一個類型轉換。

如果已知某個基類向衍生類別轉換是安全的,可以使用static_cast來強制覆蓋編譯器的檢查。


衍生類別向基類的自動類型轉換隻對指標或參考型別有效, 在2個對象之間不存在這樣的轉換。


函數模板和類模板成員函數的定義通常放在標頭檔中。

預設情況下,對於一個執行個體化了的類模板,其成員只有在使用時才被執行個體化。


c++ primer 5

聯繫我們

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