static_cast<type_name>(experssion)

C++四种类型转换方式

C语言类型转换不适用于C++,因此出现了新的类型转换。或者说C语言的强转不安全,没有安全检查。

1.static_cast(expression)

将表达式转换为type_name类型,在编译时使用类型信息转换;但没有运行时类型检查保证转换的安全性:适用范围

1)用于基本类型的转换,如整型之间

#include
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(ia);
    dx=static_cast(ch);
    ia=temp;
    temp=static_cast(ia);
}

2)用于指针的强转(可能会出现的问题)

//
// Created by 18751 on 2023/5/24.
//
#include 
using namespace std;
int main(){
    int a=10;
    char b='a';
    int* intptr=&a;
    char* charptr=&b;//这个是安全的指针

    int* test1 = static_cast(&b);
}

编辑器不让我们去强转。可是,为什么呢?

因为int指针指向的是一块四字节内存大小的空间,而char指针指向一块内存大小的内存空间。
 

3)支持子类到基类的类型转换,不支持子类到基类的类型转换。如果类中有虚函数的话,这种类型转换是不安全的。不安全的原因是以下几点:

  1. 类型转换不安全:如果将一个不兼容的指针类型转换为一个另外的指针类型,可能会造成访问内存错误,这会导致不确定的行为。

  2. 对象不可转换:如果将一个无法进行转换的对象转换为另一种类型,那么在运行时将会发生类型错误。

你可能感兴趣的:(c++,开发语言)