国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++顯式轉換(1)-static_cast

2019-11-06 06:31:40
字體:
來源:轉載
供稿:網友

按照《C++程序設計語言》中的話來講,static_cast運算符完成相關類型的轉換。這個相關類型很微妙,還是舉例說明吧。

假設有以下繼承關系。

class Animal{};class Dog : public Animal{};class Cat : public Animal{};

我們首先進行簡單的準備

Dog* dog = new Dog();Animal* animal = dog;

派生類類型的指針賦值給基類類型指針是不需要類型轉換的,因為:

 Dog is a Animal

同理,因為上述判斷不能成立,下面的轉換需要使用static_cast。

Cat* cat1 = static_cast<Cat*>(dog);  //例1,NG

這一行會有編譯錯誤,當然原因也應該好理解,因為Dog is not a Cat。接下來看下一個例子。

Dog* sdog = static_cast<Dog*>(animal);   //例2,OK

也許你會說沒有問題,因為animal指向的本來就是Dog嘛。

但是,請看下一個例子。

Cat* cat2 = static_cast<Cat*>(animal);   //例3,OK???

雖然animal指向的是Dog對象,還是可以通過編譯。

哪里錯了?

例2的理解錯了,animal實際指向的對象是什么,程序執行以后才知道(動態),static_cast只會進行靜態檢查,即

    Dog轉換Cat可以么?不行,編譯錯誤。

    Animal轉換為Dog可以么?可能行,編譯通過

    Animal轉換為Cat可以么?可能行,編譯通過

結論:staitc_cast可以對轉換進行靜態檢查,幫我們查出一部分錯誤。

古人說:勿以惡小而為之,勿以善小而不為

發現錯誤當然越早越好,更何況是自動在便宜階段。

如果不用強制類型轉換當然更好。如果做不到,先從正確使用static_case/dynamic_cast/const_cast/reinterPRet_cast開始吧。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 贺兰县| 祁东县| 奉贤区| 白河县| 师宗县| 曲麻莱县| 稻城县| 崇明县| 临颍县| 且末县| 泾源县| 同仁县| 图片| 区。| 株洲市| 将乐县| 武强县| 健康| 孝昌县| 麻城市| 丹凤县| 连平县| 定远县| 茌平县| 永修县| 正定县| 乡城县| 吴川市| 和平县| 邓州市| 化州市| 临江市| 漳浦县| 鹿泉市| 寿阳县| 白玉县| 聂拉木县| 中西区| 长葛市| 镇远县| 永和县|