在C++中,类型转换(Type Conversion)是将一种数据类型转换为另一种数据类型的过程。类型转换可以分为两大类:隐式转换(implicit conversion)和显式转换(explicit conversion)。
1. 隐式转换
隐式转换是由编译器自动完成的,不需要显式的类型转换操作符。这种比较简单。常见的隐式转换有以下几种:
1.1 整形提升
char
、short
等较小的整数类型可以自动提升为 int
。
char c = 'A';
int i = c; // char 自动提升为 int
1.2 算术转换
不同类型的数据在混合运算时会进行转换,以确保运算的正确性。例如,int
和 double
进行运算时,int
会被转换为 double
。
int i = 10;
double d = 3.14;
double result = i + d; // int 被转换为 double
2. 显示转换
以上都属于C风格的转换格式,简单但是有一些问题,
- 隐式类型转化有些情况下可能会出问题:比如数据精度丢失。
- 显式类型转换将所有情况混合在一起,代码不够清晰。
因此C++提出了自己的类型转化风格,注意因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格。
标准C++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符:
static_cast
reinterpret_cast
const_cast
dynamic_cast
2.1 static_cast
static_cast
用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用 static_cast
,但它不能用于两个不相关的类型进行转换。
int main()
{
double d = 12.34;
int a = static_cast<int>(d);//将d转换为ind
std::cout << a << std::endl;//输出12
return 0;
}
两个不相关的类进行转换,会出错。如下:
int main()
{
double d = 12.34;