91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c++的強制類型轉換

發布時間:2020-08-05 21:48:26 來源:網絡 閱讀:366 作者:泄密的心 欄目:編程語言

在C和C++中,強制類型轉換時常出現,例如:

void Test ()
{
     int i = 1;     // 隱式類型轉換
     double d = i;
     printf("%d, %.2f\n" , i, d);

     int* p = &i; // 強制類型轉換
     int address = (int) p;

     printf("%x, %d\n" , p, address);
}

所以,強制類型轉化時常存在,故而C++風格的類型轉換提供了4種類型轉換操作符來應對不同場合的應用。它們分別是const_caststatic_castdynamic_castreinterpreter_cast


reinterpret_cast操作符用于將一種類型轉換為另一種不同的類型。例如

typedef void (* FUNC)();

int DoSomething (int i)
{
     cout<<"DoSomething" <<endl;
     return 0;
}

reinterpret_cast可以編譯器以FUNC的定義方式去看待 DoSomething函數, 所以非常的BUG,下面轉換函數指針的代碼是不可移植的,所以不建議這樣用,并且C++不保證所有的函數指針都被一樣的使用,所以這樣用有時會產生不確定的結果。

void Test ()
{
     FUNC f = reinterpret_cast< FUNC>(DoSomething );
     f();
}


const_cast最常用的用途就是刪除變量的const屬性,方便賦值。

void Test ()
{
     volatile const int tem = 3;
     int* p = const_cast< int*>(&tem );
     *p = 8;

     cout<<tem<<endl;
}

dynamic_cast用于將一個子類對象的指針轉換為父類對象的指針或引用(動態轉換)

向上轉型:子類對象->父類指針/引用(不需要轉換)

向下轉型:父類對象->子類指針/引用(用dynamic_cast轉型是安全的)

一. dynamic_cast只能用于含有虛函數的類

二. dynamic_cast會先檢查是否能轉換成功,能成功則轉換,不能則返回0

class A
{
public :
     virtual void Test(){}
};

class B : public A
{};

void fun (A* pa)
{
   
   B* pb1 = static_cast<B*>(pa);
   B* pb2 = dynamic_cast<B*>(pa);
   

   cout<<"pb1:" <<pb1<< endl;
   cout<<"pb2:" <<pb2<< endl;
}


static_cast類似于C風格的強制轉換。無條件轉換,靜態類型轉換。用于:

  1. 基類和子類之間轉換:其中子類指針轉換成父類指針是安全的;但父類指針轉換成子類指針是不安全的。(基類和子類之間的動態類型轉換建議用dynamic_cast)

    2. 基本數據類型轉換。enum, struct, int, char, float等。static_cast不能進行無關類型(如非基類和子類)指針之間的轉換。


  3. 把空指針轉換成目標類型的空指針。


  4. 把任何類型的表達式轉換成void類型。


  5. static_cast不能去掉類型的const、volitale屬性(用const_cast)。

以上便是對四種函數的淺析,如有不足,請多多指教

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

重庆市| 应城市| 布尔津县| 宿迁市| 晋城| 和平区| 巫山县| 孟州市| 五大连池市| 瓦房店市| 收藏| 凌海市| 枝江市| 丽江市| 甘南县| 平原县| 沙雅县| 象山县| 寻乌县| 阳东县| 甘洛县| 松潘县| 平南县| 永修县| 土默特左旗| 长丰县| 杭锦旗| 伊宁市| 涿州市| 开江县| 襄城县| 襄樊市| 南靖县| 迭部县| 永丰县| 广河县| 谷城县| 永昌县| 黎川县| 贡嘎县| 家居|