首页 > 编程语言 >C++中类型转换static_cast

C++中类型转换static_cast

时间:2024-11-08 22:56:53浏览次数:4  
标签:类型转换 转换 int cast Base static

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 是一种类型安全的显式转换工具,适合编译期可确定的转换需求。

 

标签:类型转换,转换,int,cast,Base,static
From: https://www.cnblogs.com/chentiao/p/18536095

相关文章

  • C++ 模板参数的两种类型转换
    与非模板函数一样,我们在一次调用中传递给函数模板的实参被用来初始化函数的形参。如果一个函数形参的类型使用了模板类型参数,那么它采用特殊的初始化规则。只有很有限的几种类型转换会自动地应用于这些实参。编译器通常不是对实参进行类型转换,而是生成一个新的模板实例。与往常一......
  • FootyForecast足球数据预测软件——XGBoost算法实战
    足球数据分析——XGBoost算法实战基于上数据分析的AI足球大模型预测平台,感兴趣的可以下载。足球预测专家推荐链接:http://lcsjfx.com/FootyForecast/DownLoad随着足球数据的日益丰富,数据分析在足球领域的应用也越来越广泛。其中,XGBoost算法作为一种高效、强大的机器......
  • 数据类型转换和Ascii表常用的几个数值
    1.数据类型转换:当数据类型不一致时,会发生数据类型转换(1)自动类型转换(隐式):数据范围从较小到较大时,代码不需做特殊处理,自动完成(2)强制类型转换(显式):数据范围从较大到较小时,代码需要特殊处理处理格式:范围小的类型范围小的变量名=(范围较小的类型)范围较大的数据;注意:<1>.强制类......
  • Spring-Converter类型转换器
    Converter在Spring3中引入了一个Converter接口,它支持从一个Object转为另一个Object。除了Converter接口之外,实现ConverterFactory接口和GenericConverter接口也可以实现我们自己的类型转换逻辑。Converter接口Converter<S,T>接口定义了从类型S转换为类型T的转换器。packa......
  • Java入门十二——static详解(含toString)
    上节课,我们只是微微提到了static,今天我们来具体讲讲static的用法static1.类名.静态成员变量(上篇博客Java入门十一有讲)为了方便大家查看,我把链接放在这里Java入门11——关键字总结+static-CSDN博客2.类名.静态成员方法这里,我们首先创建两个类,分别是java12和demo1,然后调用d......
  • 2024/11/4日 日志 关于JavaScript 变量、数据类型、类型转换和流程控制语句的学习
    经过两天的休憩,状态更佳,后面的笔记和学习进度也会加快JavaScript变量、数据类型、类型转换和流程控制语句点击查看代码----变量--JavaScript中用var关键字(variable的缩写)来声明变量--vartest=20;--test="张三":--·JavaScript是一门弱类型语言变量可......
  • 三周精通FastAPI:31 使用 StaticFiles从目录中自动提供静态文件
    官方文档:静态文件-FastAPI静态文件¶您可以使用 StaticFiles从目录中自动提供静态文件。使用StaticFiles¶导入StaticFiles。"挂载"(Mount)一个 StaticFiles() 实例到一个指定路径。fromfastapiimportFastAPIfromfastapi.staticfilesimportStaticFilesapp......
  • WPF ItemsSource referenced StaticResource
    //xaml<Window.Resources><local:SizeConverterx:Key="sizeConverter"/><local:BooksDatax:Key="booksData"/></Window.Resources><Grid><DataGridGrid.Row="1"......
  • 深入解析 FastAPI 查询参数:配置、类型转换与灵活组合
    深入解析FastAPI查询参数:配置、类型转换与灵活组合本文全面解析了FastAPI查询参数的使用方法,包括配置默认值、设为可选或必选参数、类型转换以及组合使用等实用技巧。通过查询参数,开发者可以在路径操作函数中接收动态输入,灵活地构建API接口。文章详细说明了如何利用......
  • UEC++中的GetClass和StaticClass函数
    GetClass()用途:GetClass() 是 UObject 类的一个实例方法,用于获取调用它的对象的类信息。返回类型:返回 UClass*,即指向调用对象的类的 UClass 对象的指针。使用场景:当你有一个 UObject 或其子类的实例,并且想要获取这个实例所属类的信息时,你会使用 GetClass()。例......