备注: 后面看到 类,继承,虚函数的时候继续来补充。
1.1 C语言中强制类型转换 1.1.1 示例
(Type )(Expression)1.1.2 C方式强制类型转换存在的问题
过于粗暴 (1) 任意类型之间都可以进行转换,编译器很难判断其正确性难以定位(1) 在源码中无法快速定位所有使用强制类型转换的语句1.1.3 如何才能更安全的转换呢 C++ 中将强制类型转换分成了四类.
static_cast const_cast dynamic_castreinterprete_cast用法 xxx_cast (expression)1.2 static_cast 强制类型转换 1.2.1 转换规则
用于基本类型间的转换不能用于基本类型指针间的转换用于有继承关系类对象之间的转换和类指针之间的转换。1.2.2 案例1 :
#include <stdlib.h> void static_cast_demo1() { int a =0x1234; char b= static_cast<char>(a); printf("b= %d\n",b);//0x34 } /* void static_cast_demo2() //error static_cast不能用于 普通类型指针间的转换 { int a =10; int* p1= &a; char * p2= static_cast<char*>(p1); printf("p2 = %p\n",p2); } */ int main(int argc, char* argv[]) { static_cast_demo1(); // static_cast_demo2(); return 0; }1.2.3
1.3 const_cast 强制类型转换 1.3.1 转换规则
用于去除变量的只读属性强制转换的目标类型必须是指针或者引用 1.3.2 示例代码1 void const_cast_demo() { int a =10; const int * p =&a; int * p2 =const_cast<int *> (p); *p2 = 20; printf("a = %d\n",a); //20 } int main(int argc, char* argv[]) { const_cast_demo(); return 0;}1.3.3
1.4 reinterpret_cast 强制类型转换 1.4.1 转换规则
用于指针类型间的强制转换用于整数和指针类型间的强制转换 1.4.2 void reinterpret_cast_demo() { int a =10; int* p1= &a; char * p2= reinterpret_cast<char*>(p1); printf("p2 = %p\n",p2); } int main(int argc, char* argv[]) { reinterpret_cast_demo(); return 0; }1.4.3
1.5 dynamic_cast 强制类型转换 1.5.1 转换规则
用于有继承关系的类指针间的转换用于有交叉关系的类指针间的转换具有虚函数的支持 1.5.2 1.5.3参考一 :狄泰软件学院C++课程
