// 《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原始碼剖析》, p110c++ primer, p56 ↩︎究竟乙個 class 什麼時候該有自己的 non-trivial default constructor,non-trivial copy constructor,non-trivial assignment operator, non-trivial destructor 呢?乙個簡單的判斷準則是:如果 class 內含指標成員,並且對它進行記憶體動態配置,那個這個 class 就需要實現出自己的 non-trivial-***。
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運算 符號...