C++——类型转换
文章目录
C语言的类型转换
在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化。其中C语言中总共有两种形式的类型转换,隐式类型转换和显式类型转化。
-
隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败。
-
显式类型转化:需要用户自己处理。
void test1()
{
int a = 10;
double b = a;//隐式类型转换
cout << "int a= " << a << " double b= " << b << endl;
int* p = &a;
int c = (int)p;//显示的强制类型转换
cout << "p= " << p << " int c= " << c << endl;
}
int main()
{
test1();
return 0;
}
- 只有相近类型之间才能发生隐式类型转换,比如int 和double类型,它们只是表示的范围和精度不同。而地址类型表示的是地址编号,因此整型和地址类型之间不能发生隐式类型转换,需要通过显式类型转换。
为什么C++需要四种类型转换
C风格的转换格式很简单,但是有不少缺点的:
- . 隐式类型转化有些情况下可能会出问题:比如数据精度丢失。
- 显式类型转换将所有情况混合在一起,代码不够清晰。
因此C++提出了自己的类型转化风格,且为了提高可视性,引入了四种命名的强制类型转换操作符,分别是static_cast、reinterpret_cast、const_cast、dynamic_cast。注意因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格。
C++强制类型转换
static_cast
static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用 static_cast,即它可以用于任何隐式类型转换,但它不能用于两个不相关的类型进行转换
void test1()
{
double a = 3.141592