一、C语言的强制类型转换
1、过于粗暴
任意类型之间都能进行转换,编译器很难判断其正确性
2、难于定位
在源码中无法快速定位所有使用强制类型转换的语句
二、C++强制类型转换
1、static_cast<T>(expr) 静态强转
1、用于基本类型间的转换,但不能用于基本类型指针之间的转换
2、用于有继承关系类对象之间的转换和类指针之间的转换
3、static_cast是在编译期间转换的,无法在运行时检测类型
所以类类型之间的转换有可能存在风险
#include <iostream>
using namespace std;
class Parent
{
};
class Child : public Parent
{
};
int main()
{
int a = 1;
char ch = 'x';
a = static_cast<int>(ch); //用于普通类型的转化
cout << a << endl;
// int *p = static_cast<int *>(&ch); //不能用于普通类型指针之间的转换
Parent p;
Child c;
p = static_cast<Parent>(c); //用于有继承关系的类对象之间的转换
Parent *p1