C++中类型转换static_cast

static_cast<type> 是 C++ 中的一种类型转换方式,用于在编译期进行静态类型转换。与 C 风格的强制类型转换不同,static_cast 更加安全和明确,因为它只允许特定的类型转换,避免了潜在的错误和歧义。

static_cast 的用法

static_cast<type>(expression) 将 expression 转换为 type 类型。常见的使用场景包括:

  1. 基本类型转换:用于将不同的基本数据类型相互转换,例如 int 转换为 float 或 double

    int i = 10;
    float f = static_cast<float>(i); // int 转换为 float
    
  2. 指针和引用的上行转换(upcasting):在继承体系中,static_cast 可以安全地将派生类指针或引用转换为基类指针或引用。

    class Base {};
    class Derived : public Base {};
    
    Derived d;
    Base* b = static_cast<Base*>(&d); // Derived* 转换为 Base*
    
  3. 显式转换回原始类型:可以用来将枚举、void* 等非相关类型转换为基本类型(前提是类型是兼容的)。

    void* ptr = &i;
    int* intPtr = static_cast<int*>(ptr); // 将 void* 转换回 int*
    
  4. 避免隐式转换不当发生:有时构造函数或重载运算符可能引发隐式类型转换,用 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 是一种类型安全的显式转换工具,适合编译期可确定的转换需求。

 
posted @   海_纳百川  阅读(76)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有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强势使用方法
本站总访问量8962500
 
点击右上角即可分享
微信分享提示