国产探花免费观看_亚洲丰满少妇自慰呻吟_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開始吧。


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

圖片精選

主站蜘蛛池模板: 乌海市| 镶黄旗| 沙湾县| 饶河县| 绍兴市| 山东省| 秭归县| 北票市| 明溪县| 喀喇沁旗| 时尚| 五指山市| 凤城市| 新郑市| 秦安县| 扎囊县| 四子王旗| 日照市| 栾川县| 长岭县| 淮北市| 松阳县| 乐至县| 丽水市| 邵东县| 峨眉山市| 赣榆县| 米易县| 崇礼县| 寿光市| 如东县| 依安县| 太原市| 门源| 安新县| 长沙市| 鹤峰县| 酒泉市| 讷河市| 讷河市| 平乡县|