强制类型转换示例(P35)
/*强制类型转换
a.static_cast用于将一种数据类型转换成另一种数据类型。static_cast<类型名>(表达式)
其功能是把表达式转换为类型名所指定的类型。
b.const_cast用于去除指针和引用的常量性,但不能去除变量的常量性。
const_cast<类型名>(表达式)
功能是:(1)将常量指针转化成非常量的指针,并且仍然指向原来的对象;(2)将常量引用转换非常量的引用,并且仍然指向原来的对象。
*/
#include <iostream>
using namespace std;
int main()
{
int a = 10;
const int *p = &a;
const int ca = 30;
int *q;
cout << "a的地址为:\t" << &a << "\ta的值为:\t" << a << endl;
cout << "*p指向的地址为:" << p << "\t*p的值为:\t" << *p << endl;
q = const_cast<int *>(p); //去除p的常量性赋给q, 如果写p=q,则会报错
*q = 20;
cout << "a的地址为:\t" << &a << "\ta的值为:\t" << a << endl;
cout << "*p指向的地址为:\t" << p<< "\t*p的值为:\t" << *p << endl;
cout << "*q指向的地址为:\t" << q << "\t*p的值为:\t" << *q << endl;
cout << "分界线" << endl;
p = &ca; //ca的值不能修改
q = const_cast<int *>(p); //去除p的常量性赋给q
*q = 40;
cout << "ca的地址为:\t" << &ca << "\tca的值为:\t" << ca << endl;
cout << "*p指向的地址为:\t" << p << "\t*p的值为:\t" << *p << endl;
cout << "*q指向的地址为:\t" << q << "\t*p的值为:\t" << *q << endl;
system("pause");
return 0;
}

浙公网安备 33010602011771号