《STL原始碼剖析》第三章筆記

2021-10-09 09:25:22 字數 1781 閱讀 6374

// 《stl原始碼剖析》, p88

iterator_traits<

const

int*

>

::value_type;

常量指標(const pointer)

常量指標必須初始化,而且一旦初始化完成,則它的值(也就是存放在指標中的那個位址)就不能再改變了。

想要弄清楚這些宣告的含義最行之有效的方法是從右向左閱讀。在上述例子中,離 curerr 最近的符號是 const,意味著 curerr 本身是乙個常量物件,物件的型別由宣告符的其餘部分確定。宣告符中的下乙個符號是*,意思是 curerr 是乙個常量指標。最後,該宣告語句的基本資料型別部分確定了常量指標指向的是乙個 int 物件。1

// 《stl原始碼剖析》, p90

template

<

class

t>

struct iterator_traits>

;

兩個指標相減的結果的型別是一種名為 ptrdiff_t 的標準庫型別,和 size_t 一樣,ptrdiff_t 也是一種定義在 cstddef 標頭檔案中的機器相關的型別。因為差值可能為負值,所以 ptrdiff_t 是一種帶符號型別。 2

//《stl原始碼剖析》, p91

當我們對乙個 mutable iterators 進行提領操作時,獲得的不應該是乙個右值(rvalue),應該是乙個左值(lvalue),因為右值不允許賦值操作(assignment),左值才允許。

原文中對於左、右值的描述過於簡單,這裡進行簡單的擴充。

//《stl原始碼剖析》, p91

它利用「內嵌型別」的程式設計技巧與編譯器的 template 引數推導功能,增強 c++ 未能提供關於型別認證方面的能力,彌補 c++ 不為強型別(stronged typed)語言的遺憾。

// 《stl原始碼剖析》, p109

template

<

class

outputiterator

,class

size

,class

t>

outputiterator fill_n

(outputiterator first, size n,

const t& value)

輸出迭代器可以看作輸入迭代器功能上的補集——只寫而不讀元素。輸出迭代器必須支援

我們只能向乙個輸出迭代器賦值一次。類似輸入迭代器,輸出迭代器只能用於單遍掃瞄演算法。用作目的位置的迭代器通常都是輸出迭代器。6

// // 《stl原始碼剖析》, p110

究竟乙個 class 什麼時候該有自己的 non-trivial default constructor,non-trivial copy constructor,non-trivial assignment operator, non-trivial destructor 呢?乙個簡單的判斷準則是:如果 class 內含指標成員,並且對它進行記憶體動態配置,那個這個 class 就需要實現出自己的 non-trivial-***。

c++ primer, p56 ↩︎

c++ primer, p107 ↩︎

c++ primer, p121 ↩︎

c++11 左值、右值、右值引用詳解↩︎

強弱型別↩︎

c++ primer, p366 ↩︎

STL原始碼剖析筆記 第三章

迭代器型別之一 value type 1.1 宣告內嵌型別 template class t struct myiter t operator const template class i typename i value type 是func的返回值型別 func i ite mtiter ite...

第三章 LinkedList原始碼分析

linkedlist底層是乙個雙向鍊錶,是乙個直線型的鍊錶結構 在jdk1.7以前,其底層是雙向迴圈鍊錶 1.建立 鍊錶中的所儲存的元素個數 transient int size 0 指向頭結點的指標 transient nodefirst 指向尾結點的指標 transient nodelast 無...

第三章筆記

第三章預習筆記 一 高階語言和機器指令中的運算 1,按位運算 符號 按位or運算 符號 按位and運算 符號 表示按位not運算 符號 按位xor運算。實現掩碼操作 通過與給定的乙個位模式進行按位與,可以提取所需要的位,對這些位進行 置1 清0 等。2,符號 按位or運算 符號 表示and運算 符號...