1. 程式人生 > 程式設計 >C++ xxx_cast實現轉換程式碼例項解析

C++ xxx_cast實現轉換程式碼例項解析

1.1 static_cast

  static_cast可以在一個方向上實現隱式轉換,在另一個方向上實現靜態轉換。其適用於單隱和雙隱兩種情況。

雙隱

    雙隱即兩邊都可以直接進行隱式轉換,適用於一般型別的資料轉換(如int,float,double,long等資料型別之間的轉換)

單隱

    單隱即只能在一個方向上進行隱式轉換,在另一個方向上只能實現靜態轉換。(如void* 和指標之間的轉換,任意型別的指標可以轉換為void*,但是void*不能轉換為任意型別的指標,因此將void*轉換為任意型別的指標時就需要呼叫靜態轉換)

//首先要驗證的是static_cast,其可以實現在一個方向上做隱式轉換,另一個方向上做靜態轉換,可以適用於單隱和雙隱兩種情況

  //首先是雙隱,也就是兩邊都能直接進行隱式轉換,一般適用於基本資料型別,如
  int a = 4;
  double b = 3.2;
  a = b;
  b = a;
  cout << a << endl;
  cout << b << endl;
  a = static_cast<int> (b);
  b = static_cast<double> (a);

  //然後是單隱,也就是說,只能從一遍到另一邊進行隱式轉換
  //任意型別的指標可以轉換為void*,但是void*不能轉換為任意型別的指標
  void* p = &b;
  int* q = &a;
  p = q;
  q = static_cast<int*>(p);

1.2 reinterpret_cast

  reinterpret_cast“通常為運算元的位模式提供較底層的重新解釋”-->也就是說將資料以二進位制的形式重新解釋,在雙方向上都不可以隱式型別轉換的,則需要重新型別轉換。可以實現雙不隱的情況,如int轉指標,指標轉int等。

//雙不隱
  int *m=&a;
  int n=4;
  m = reinterpret_cast<int*>(n);
  n = reinterpret_cast<int>(m);

1.3 const_cast

  Const_cast可用來移除非const物件的引用或指標的常量性。其可以將const變數轉換為非const變數。其可以用於去除指標和引用的const,const_cast是對const的語義補充。其目標型別只能是引用或指標。

  非const物件 --> const引用或指標 --> 脫const --> 修改非const物件

//const_cast-->用於去除非const物件的const,用於指標和引用
  /************ 第一種情況,去引用的const化 ************/
  int aa;
  const int& ra = aa;
  aa = 100;
  cout << aa << endl;
  cout << ra << endl;
  //ra = 200;//這樣是錯誤的,因為ra是const,要實現ra的修改,必須去const化
  const_cast<int&> (ra) = 300;
  cout << aa << endl;
  cout << ra << endl;

  /************ 第二種情況,去指標的const化 ************/
  const int* pp = &a;
  //*p = 200;//這樣是錯誤的,因為指標p是const型別,要實現p的修改,必須去const化
  *const_cast<int*>(pp) = 500;
  cout << *pp << endl;

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。