C++学习笔记(三十九):c++ 类型转换

本节介绍c++类型转换的相关知识。c++是强类型语言,存在一个类型系统用来将一种类型的数据强制转换成另一种类型。一般有两种方式进行强制类型转换。

  • c风格类型转换

  • int a = 5;

    double value = a;

    double b = 8.4 + (int)value;

  • c++风格类型的转换

  • static_cast:静态类型转换

  • reinterpret_cast:和类型双关类似,将一段内存解释成别的类型

  • dynamic_cast:动态类型转换

  • const_cast:移除或添加变量的const限定

  • 上述四种类型转换均提供编译时检查功能,使用起来更加安全。

  • 代码示例如下:

cpp 复制代码
#include<iostream>
class Base
{
public:
    Base(){}
    virtual ~Base(){}
};
class Derived : public Base
{
public:
    Derived(/* args */){};
    ~Derived(){};
};
class AnotherClass : public Base
{
public:
    AnotherClass(/* args */){};
    ~AnotherClass(){};
};

int main()
{
    double value = 4.3;
    //AnotherClass* s1 = static_cast<AnotherClass*>(&value);  //使用static_cast进行类型转换,会检查类型,static_cast from 'double *' to 'AnotherClass *' is not allowed
    //要解决上述问题,需要使用reinterpret_cast
    AnotherClass* s = reinterpret_cast<AnotherClass*>(&value);

    //dynamic_cast:在做特定类型转换是提供一种安全机制,专门用于继承层次结构的强制类型转换。
    Derived* dervied = new Derived();
    Base* base = dervied;

    AnotherClass* ac = dynamic_cast<AnotherClass*>(base);//dynamic_cast转换会有返回值,可以检测转换是否成功
    if (ac)
    {
        std::cout << "转换成功" << std::endl;
    }
    else
    {
        std::cout << "转换失败" << std::endl; //执行else分支,因为base在代码中是Derived类
    }
    
     

    std::cin.get();
}
相关推荐
青梅味猪大肠6 小时前
【深入浅出C++】为什么虚表指针可以解决菱形继承
开发语言·c++
Lhan.zzZ7 小时前
QML 组件库:VS2022 + Qt 静态库方案
开发语言·c++·qt·visual studio
骐骥17 小时前
学习:javaScriptProxy和registerJavaScriptProxy有什么区别,能注册多少个对象
学习·鸿蒙
Huathy-雨落江南,浮生若梦7 小时前
Caddy 学习笔记 - 反向代理与 IP 封禁
笔记·学习·tcp/ip
谢白羽8 小时前
SGLang的AWQ量化笔记
笔记·python·sglang
噜~噜~噜~8 小时前
操作系统笔记-2.3.5.2 读者-写者问题
笔记·操作系统
m4Rk_9 小时前
【论文阅读】Agent 记忆机制(57):MemSearch-o1——从查询词元生长证据,重组 Deep Search 记忆路径
论文阅读·人工智能·学习·开源·github
一木 之林9 小时前
五、C++ 新特性、关键字与编译原理(进阶)(二)
java·开发语言·c++
OPEN-F9 小时前
C++11/14新特性精讲:移动语义与智能指针实战
开发语言·c++·算法
闭月之泪舞9 小时前
C++编程学习
c++·学习