C++中显示的类型转换

来源:互联网 发布:淘宝上怎么挣钱 编辑:程序博客网 时间:2024/04/30 05:41

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;
}

原创粉丝点击