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

本文介绍了C++中的类型转换,包括c风格转换(如inta=5;doublevalue=...),以及静态_cast、reinterpret_cast、dynamic_cast和const_cast等高级转换,重点讲解了它们的用途、安全性和在继承层次结构中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本节介绍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限定

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

  • 代码示例如下:

  • #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();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值