• 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);
    
  • 相关阅读:
    大端法小端法以及判断方法
    多线程的同步互斥
    LeetCode344 字符串反转
    LeetCode977 有序数组的平方
    剑指54 二叉搜索树的第k大节点
    Linux抓包工具tcpdump使用总结,WireShark的过滤用法
    二进制部署k8s集群(8):安装容器网络插件Flannel
    python--Yaml操作
    python--读写excle执行测试用例
    python--安装、操作mysql数据库
  • 原文地址:https://www.cnblogs.com/LuckCoder/p/15056458.html
Copyright © 2020-2023  润新知