• C++类型转换


    C++类型转换

    static_cast

    任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast

    example:

    int j=10;
    double value=static_cast<double>(j)/2; 
    
    void *p =&d;
    //必须确保d是double类型,否则类型不符合,会产生未定义的结果
    double *dp=static_cast<double *>(p);
    

    const_cast

    const_cast只能改变运算对象的底层const,即将常量对象转换成非常量对象。去掉const性质

    const_cast常常用于函数重载种,如一个函数是常函数,一个是普通函数,则可以直接复用一份代码

    注:如果对象是常量,再使用const_cast执行操作就会产生未定义的行为

    const volatile int ci = 100;
    int* pci = const_cast<int*>(&ci);
    

    reinterpret_cast

    reinterpret_cast通常为运算对象的位模式提供较低层次上的重新解释

    int *ip;
    char *pc = reinterpret_cast<char *>(ip); //编译器不会报错
    string str(pc);//可能在运行时发生错误,pc所值的真实对象是一个int而非字符
    

    使用reinterpret_cast非常危险,一般不建议使用

    dynamic_cast

    dynamic_cast用于将基类的指针或引用安全的转换成派生类的指针或引用

    使用场景:

    想使用基类的指针或者引用执行子类的某个函数并且该函数不是虚函数(一般情况,我们应该尽量使用虚函数)

    当基类指针指向子类对象时,dynamic_cast是安全的并且可以执行转换,否则会执行失败或则抛出异常

    //A是基类,B是子类
    B b;
    A* pa = &b;
    B* pb = dynamic_cast<B*>(pa);
    
  • 相关阅读:
    java web项目防止多用户重复登录解决方案
    通过Google浏览器Cookie文件获取cookie信息,80以上版本有效
    js实现json数据导出为Excel下载到本地
    golang 搭建web服务器
    typescript笔记
    canvas屏幕动画
    canvas鼠标特效
    博客皮肤分享
    HTML的背景色和背景图、图片
    HTML表格头部、主体、页脚
  • 原文地址:https://www.cnblogs.com/LuckCoder/p/15056458.html
Copyright © 2020-2023  润新知