More Effective C 之型別轉換

2021-08-28 10:40:38 字數 1148 閱讀 2627

1.條款之優先考慮c++風格的型別轉換

c++通過引用4種新的型別轉換克服了c風格的型別轉換的缺點。這四種操作符是:static_cast,const_cast,dynamic_cast以及reinterpret_cast。大多數情況下,關於這些操作符應該知道的是,我們所習慣的寫法為:(type) expression

現在我們通常寫為:static_castexpression

(1)關於static_cast的使用:用於型別轉換

比如之前:int  number;

double result =(double) number;

使用新的型別轉換,我們應該這樣寫:

double result = static_castnumber;

(2)關於const_cast的使用:用來去除乙個表示式的const屬性或volatile屬性

例:class widget;

class specialwidget:public widget;

void update(specialwidget *psw);

specialwidget sw;

const specialwidget &csw = sw;

update(&csw);//這是錯的,因為csw為const

update(const_cast(&csw));  //這是對的,使用了const_cast轉換符

(3)關於dynamic_cast的使用:它是用來針對乙個繼承體系做向下或橫向的安全轉換

例:(參考以上的**接下面的**實現)

widget *pw;

update(dynamic_cast(pw));

(4)關於reinterpret_cast的使用:它最常見的用法是用在函式指標之間進行型別轉換。

例:typedef void (*funcptr)();

funcptr funcptrarray[10];

int dosomething();  //把乙個指向下面這個函式的指標放進funcptrarray

funcptrarray[10] = &dosomething;  //錯誤,型別出錯

funcptrarray[0]=reinterpret_cast(dosomething);   //正確,使用reinterpret_cast進行轉換

More Effective C 《基礎議題》

1 指標 指標是乙個變數,只不過這個變數儲存的是乙個位址,指向記憶體的乙個儲存單元 而引用跟原來的變數實質上是同乙個東西,只不過是原變數的乙個別名而已。如 int a 1 int p a int a 1 int b a 上面定義了乙個整形變數和乙個指標變數p,該指標變數指向a的儲存單元,即p的值是a...

More Effective C 擴充套件方法

c 3.0中增加了許多新特性.其中.擴充套件方法允許我們在不修改原有 的基礎上擴充套件類 介面的功能.有技巧的運用該特性.能寫出有效率 易維護 美觀的 c 2.0提供了許多泛型與容器的介面和類.最常見的如icomparable常常需要新建乙個comparable來進行排序比較等等.但其預設只有乙個c...

more effective C 條款四解讀

深刻考慮是否需要給類提供乙個預設建構函式 有一些類擁有乙個預設建構函式是合理的需求,比如string比如容器 linked list vector 預設建構函式可以把他們初始化為空容器。但是有一些類我們最好還是不要提供預設建構函式。比如乙個equipment類 class equipment 對於這...