一. C语言中的类型转换
1.1 隐式类型转换
1.2 强制类型转换
1.3 缺点
二. C++中的类型转换
2.1 内置类型转换为自定义类型
2.2 自定义类型转换为内置类型
2.3 自定义类型转换为自定义类型
三. C++强制类型转换
3.1 static_cast
3.2 reinterpret_cast
3.3 const_cast
3.4 dynamic_cast
四. 谨慎使用强制转换
前言:
今天我们来讲解C和C++的类型转换,内容炒鸡干,准备好水,一起来看看吧!
一. C语言中的类型转换
在C语言中,如果等号两边的类型不一样,或者形参和实参的类型不匹配,或者函数返回值与接收的变量类型不同,就会发生类型转换。C语言中存在两种类型转换:隐式类型转换和显示类型转换。
- 隐式类型转换:编译器自动进行的,能转换就转,转换不了就会报错。
- 显示类型转换:用户自己定义的。
1.1 隐式类型转换
隐式类型转换包括整型与整型之间,整型与浮点型之间,bool与整型之间,bool与指针之间的转换等等。
int i = 1; //隐式类型转换 //整型与整型之间 char c = i; //整型与浮点型之间 double d = i; //bool与整型之间 bool b = i; // bool与指针之间 int* p = &i; if (p) { printf("1"); }
特别注意的是:有关联的类型才能相互转换。
如下:
int i = 1; int* p=&i; //无法转换,他们之间没有关联 double dd = (double)p;
是会报错的,因为double类型的变量与int*类型的指针之间并没有关联,所以类型转换会失效。
1.2 强制类型转换
一般发生在不同类型的指针转换或者指针与整型转换之间:
int i = 1; int* p = &i; //显示的强制类型转换 //整型与指针之间 int address = (int)p; //不同类型指针之间 double* pp=(double*)p;
1.3 缺点