自学内容网 自学内容网

C++中的类型转换

类型转换

概述: 将一个类型显式地转换为另一个类型的过程

C风格的强制转换:

double pi = 3.14;
int iPi = (int)pi;
  • 不安全性:可能会导致一些隐式转换被执行,转换失败没有明显的错误提示
  • 不推荐

static_cast(静态转换):

在编译时进行类型检查,比C风格强制转换更安全

double pi = 3.14;
ubt iPi = static_cast<int>(pi);

适用于:

  • 基础类型之间的转换
  • 对象之间的转换,前提是二者之间存在继承关系
class Base {};
class Derived : public Base {};

Base* base_ptr = new Derived();
// 基类指针转换为派生类指针
Derived* derivedPtr = static_cast<Derived*> base;

不能用于:

  • 指针/引用类型不相关,即不在继承体系中
  • 跨不同类型的复杂转换(如将void* 转换为非void* 类型)

dynamic_cast(动态转换):

用于安全的运行时类型识别(RTTI),尤其是在多态层次中

class Base {
    virtual void foo() {}
};
class Derived : public Base {};

Base* basePtr = new Derived();
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);

if (derived_ptr) {
    // 转换成功
} else {
    // 转换失败
}

const_cast(常量转换):

用于添加或移除常量性。可以使用它来去掉对象的const或volatile限定符,或者将const 指针转换为非const指针,他不会改变对象本身

const int x = 10;
int* y = const_cast<int*>(&x); // 将const int* 转换为int*

reinterpret_cast(重解释转换):

是C++中的最强转换,直接将对象的内存表示解释为另一种类型。它通常用于指针之间的转换(包括将任意类型的指针转换为void*或其他类型的指针)

int x = 42;
char* p = reinterpret_cast<char*>(&x);
  • 无视类型的实际内容,跳过了类型的安全检查
  • 不安全性

原文地址:https://blog.csdn.net/weixin_73622063/article/details/144754736

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!