C++四种类型转换方式
C语言类型转换不适用于C++,因此出现了新的类型转换。或者说C语言的强转不安全,没有安全检查。
1.static_cast(expression)
将表达式转换为type_name类型,在编译时使用类型信息转换;但没有运行时类型检查保证转换的安全性:适用范围
1)用于基本类型的转换,如整型之间
#include<iostream>
using namespace std;
enum Week{sunday=0,mondey=1};
int main(){char ch = 'a';int ia = 12;double dx = 2.23;Week temp=sunday;ch=static_cast<char>(ia);dx=static_cast<double>(ch);ia=temp;temp=static_cast<Week>(ia);
}
2)用于指针的强转(可能会出现的问题)
//
// Created by 18751 on 2023/5/24.
//
#include <iostream>
using namespace std;
int main(){int a=10;char b='a';int* intptr=&a;char* charptr=&b;//这个是安全的指针int* test1 = static_cast<int*>(&b);
}
编辑器不让我们去强转。可是,为什么呢?
因为int指针指向的是一块四字节内存大小的空间,而char指针指向一块内存大小的内存空间。
3)支持子类到基类的类型转换,不支持子类到基类的类型转换。如果类中有虚函数的话,这种类型转换是不安全的。不安全的原因是以下几点:
-
类型转换不安全:如果将一个不兼容的指针类型转换为一个另外的指针类型,可能会造成访问内存错误,这会导致不确定的行为。
-
对象不可转换:如果将一个无法进行转换的对象转换为另一种类型,那么在运行时将会发生类型错误。