【本节内容】
1. C语言中的类型转换
2. C++强制类型转换
(explicit关键字阻止隐式转换的发生)
3. RTTI
1.C语言中的类型转换
首先我们看一段代码了解C语言中的类型转换
void Test()
{
int i = 1; // 隐式类型转换
double d = i;
printf("%d, %.2f\n" , i, d); //1 1.00
int* p = &i; // 显式的强制类型转换
int address = (int) p;
printf("%x, %d\n", p, address); //4ff69c 5240476
}
所以,C语言的隐式类型转换发生在相近类型或相关类型间。
显式的强制类型转换发生在不相关的类型间。
首先我们了解到,C语言的类型转换不会改变数值,仅仅改变了数值显示的类型用于数据的解释。
缺陷:转换的可视性比较差,所有的转换形式都是以一种相同形式书写,难以跟踪发现错误的转换
2.C++中的强制类型转换
2.1 C++ 为什么需要类型转换
C风格的转换格式很简单,但是有不少缺点的:
- 隐式类型转化有些情况下可能会使结果出问题
- 显式类型转换将所有情况混合在一起,代码不够清晰 <