C++中类型转换static_cast
static_cast<type>
是 C++ 中的一种类型转换方式,用于在编译期进行静态类型转换。与 C 风格的强制类型转换不同,static_cast
更加安全和明确,因为它只允许特定的类型转换,避免了潜在的错误和歧义。
static_cast
的用法
static_cast<type>(expression)
将 expression
转换为 type
类型。常见的使用场景包括:
-
基本类型转换:用于将不同的基本数据类型相互转换,例如
int
转换为float
或double
。int i = 10; float f = static_cast<float>(i); // int 转换为 float
-
指针和引用的上行转换(upcasting):在继承体系中,
static_cast
可以安全地将派生类指针或引用转换为基类指针或引用。class Base {}; class Derived : public Base {}; Derived d; Base* b = static_cast<Base*>(&d); // Derived* 转换为 Base*
-
显式转换回原始类型:可以用来将枚举、
void*
等非相关类型转换为基本类型(前提是类型是兼容的)。void* ptr = &i; int* intPtr = static_cast<int*>(ptr); // 将 void* 转换回 int*
-
避免隐式转换不当发生:有时构造函数或重载运算符可能引发隐式类型转换,用
static_cast
可以使转换更清晰、避免歧义。
static_cast
的限制
- 不能用于转换不相关的指针类型。
- 不检查转换的类型安全性。比如,将基类指针强制转换为派生类指针时需要确保类型正确,否则会导致未定义行为。
示例
#include <iostream>
class Base {};
class Derived : public Base {};
int main() {
int num = 10;
double d = static_cast<double>(num); // int 转换为 double
Derived derived;
Base* base = static_cast<Base*>(&derived); // Derived* 转换为 Base*
std::cout << d << std::endl; // 输出 10.0
return 0;
}
总结
static_cast
是一种类型安全的显式转换工具,适合编译期可确定的转换需求。
本文来自博客园,作者:海_纳百川,转载请注明原文链接:https://www.cnblogs.com/chentiao/p/18536095,如有侵权联系删除
分类:
C++代码块
标签:
static_cast
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2023-11-08 OpenCV透视变换-不对原图裁剪
2023-11-08 使用pillow对图像进行旋转和添加高斯白噪声
2022-11-08 IOU计算-纯python
2022-11-08 awk强势使用方法