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 @ 2024-11-08 23:10  海_纳百川  阅读(171)  评论(0)    收藏  举报
本站总访问量