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)!