《C 標準程式庫》讀書筆記(一)

2021-05-07 10:30:35 字數 1868 閱讀 4828

1,很多編譯器都要求模板的定義和實現都在標頭檔案中,這是因為必須先為他提供某個實現品,然後才能呼叫,也只有如此才能通過編譯。目前唯一能讓

「template

的運用」

具有可移植性的方式,就是在標頭檔案中以

inline function

實現temlate function。

2,下面typename

指出subtype是t

中定義的乙個型別,若不用這個關鍵字,則編譯器會認為是兩個數相乘,而不是定義的指標。

class

classa

;template 

<

typename t

>

class

myclass

;int

main() 3

,類成員函式可以是模板函式,但這樣的成員模板函式不能是虛擬的,也不能有預設引數。下面這個例子中

assign

函式中,由於引數x和

*this

型別不同,不能直接訪問

private

成員,而必須通過公有方法

getvalue

訪問。模板建構函式用於在複製物件時實現隱式型別轉換,但它並不會遮蔽隱式拷貝建構函式,只要型別完全吻合,隱式拷貝建構函式就會被產生出來並被呼叫。

template 

<

typename t

>

class

myclass

myclass(t val)

template

<

typename x

>

myclass(

const

myclass

<

x>&

x)template

<

typename x

>

assign(

const

myclass

<

x>&

x)t getvalue()

};int

main()

(為什麼這段**在

vc6下編譯通過,但在

vs2005

下無法編譯通過?)

4,dynamic_cast

將多型型別向下轉換為其實際靜態型別,若轉換失敗則會丟出乙個

bad_cast

異常。const_cast

設定或去除型別的常熟性,也可以用來去除

volatile,

這些操作法只接受乙個引數。 5

,從標準異常類別中派生新類別

class

myexception : 

public

exception

virtual

const

char

*what()

const

throw

()};

void

fun()

intmain()

catch

(const

myexception

&exp)

return0;

} 6,

auto_ptr

不允許使用一般指標慣用的賦值初始化方式,必須使用數值來完成初始化:

auto_ptr

<

classa

>

ptr(

newclassa);

auto_ptr

<

classa

>

ptr2;

ptr2 

=auto_ptr

<

classa

>

(new

classa);

《C 標準程式庫》讀書筆記(一)

1,很多編譯器都要求模板的定義和實現都在標頭檔案中,這是因為必須先為他提供某個實現品,然後才能呼叫,也只有如此才能通過編譯。目前唯一能讓 template的運用 具有可移植性的方式,就是在標頭檔案中以inline function實現temlate function。2,下面typename指出su...

《C 標準程式庫》讀書筆記(一)

1,很多編譯器都要求模板的定義和實現都在標頭檔案中,這是因為必須先為他提供某個實現品,然後才能呼叫,也只有如此才能通過編譯。目前唯一能讓 template的運用 具有可移植性的方式,就是在標頭檔案中以inline function實現temlate function。2,下面typename指出su...

《C 標準程式庫》讀書筆記

泛型 why泛型 為了讓庫更一般化。比如find,可以將三樣東西都引數化 1 查詢物件的型別 2 該物件在資料結構中的組織方式 3 滿足某某條件地查詢 仿函式p127,294 what仿函式 定義了operator 的物件 why仿函式 1 使泛型演算法更一般化 2 仿函式有自己的獨特狀態 仿函式可...