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