C++中顯示的類型轉換

C++是希望用戶能夠盡最大的定義正確的類型,而少用顯示的類型轉換,以致不用顯示的類型轉換

/*
 *C++顯示的強制類型轉換,區別與C
 *static_cast --- 數值類型之間、有一方是void* 的指針類型之間
 *const_cast  --- 用於臨時去掉const、volatile限制
 *reinterpret_cast --- 任意兩種指針類型之間,指針與數值類型之間
 *dynamic_cast --- ???
 *轉換的形式: cast-name<type-name>(expression)
 */

#include <iostream>
using namespace std;
#include <cstdlib>

int main()
{
 /*在之前用的一些強制類型轉換都是C風格的,而C++爲了儘量少用強制類型轉換,
   用了自己獨特的風格,如上所述。*/
/* int m = static_cast<int>(45.678);  //int(45.678)是C++風格 而(int)45.678是C風格
 cout << "m = " << m << endl;

 int* p= static_cast<int*>(calloc(5,sizeof(int)));
 for(int i = 0; i != 5; i++)
  cout << *(p+i) << ' ';
 cout << endl;
*/
 const int n = 110;
 cout << "原值n = " << n << endl;
 int* q = const_cast<int*>(&n);
 cout << q << endl;
 *q = 112;
 cout << "修改n = " << n << endl;

/* const int k = m;
 cout << "原值k = " << k << endl;
 const_cast<int&>(k) = 678;
 cout << "修改k = " << k << endl;

 m = int();  //零初始化
 cout << "m = " << m << endl;
 int l(668);  //直接初始化,要區別int l()這是函數
 cout << "l = " << l << endl;
*/
 double* r = reinterpret_cast<double*>(q);  //(double*)q;
 cout << r << endl;

 float f = 67.88;
 int* pt = reinterpret_cast<int*>(&f);  //(int*)&f;
 cout << *pt << endl;

 f = static_cast<float>(*q);  //(float)(*q);
 cout << f << endl;

 return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章