标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
类型转换的一般形式:cast-name(expression);
我们知道:数据类型不一样,肯定不能赋值,能赋值的原因是发生了一定的类型转换,下面我们来逐一看看C++的类型转换
1.静态转换 static_cast
static_cast的常见用法
(1)用于类层次结构中基类和派生类之间指针或引用的转换
进行上行转换(把派生类的指针或引用转换成基类表示)是安全的
进行下行转换(把基类的指针或引用转换为派生类表示),由于没有动态类型检查,所以是不安全的
(2)用于基本数据类型之间的转换,如把int转换成char。
(3)把空指针转换成目标类型的空指针
(4)把任何类型的表达式转换为void类型
void main()
{
int i = 23424;
float f = 42.24f;
double d ;
f = static_cast<float>(i);
i = static_cast<int>(d);
void *p = &i;
//cout<<*p<<endl; error C2100: illegal indirection
int *q = (int *)p;//如果要输出*p的值,第一种方式,用C语言中的强制类型转换
int *q = static_cast<int *>(p);// 第二种方式用C++里面的静态类型转换
cout<<*q<<endl;
}
``
2.**常量转换 const_cast**
去常属性,该运算符只能改变运算对象的底层const,实质:表面改,字符常量无法改变
void main()
{
//常量转换 const_cast
const int i = 321;
const int *p = &i;
int *q = const_cast