zoukankan      html  css  js  c++  java
  • C++转型操作符

    C++转型操作符 F4 :
    static_cast
    const_cast
    dynamic_cast
    reinterpret_cast

    这四个是C++标准中要求最好使用的四种转型操作符. 当然 原有C的那种 (type)expression 这样的写法 也是可行的. 但是这种写法应该彻底被放弃使用.
    因为我们有牛逼的F4.

    static_cast:

    int num1;
    int num2;
    

    原有C转换方式
    float a = (float)num1/num2;
    现在
    float a = static_cast(num1)/num2;

    跟原C转换方式差不多....作用,影响.....
    好吧,我确实不是很清楚这个的优劣势.
    当然,这么写对于阅读更加容易理解.

    const_cast

    只用来移除表达式的常量性! 简单来说就是 将一个const修饰的常量转换成常量
    举个栗子:
    class animal{....};
    animal cat;
    const animal& dog = cat; //这里的dog代表的是cat的reference,并且dog为const

    现在有个函数需要调用:
    update(animal* obj);
    错误的调用体位:
    update(&dog);
    正确的调用体位:
    update(const_cast<animal*>(&dog)); //注意!这里传递进去的dog(即cat)在此函数中可被更改!

    dynamic_cast

    用于执行继承体系中: 安全的向下转型 或 跨系转型。
    对于个人经常使用的地方就是,我们具体操作的是子类,而在用于接口传递的时候是使用父类(或称基类),这个时候就非常需要该转型符了。

    该转型符在转型之后立马就能得知是否转换成功,详细说明:
    从指向Base的pointer转换为derived的pointer,失败则返回null (这样的结果真是棒棒哒)
    从指向Base的reference转换成derived的reference,失败则直接抛出exception ! (是不是棒棒哒)

    注意:

    1. 该转型符无法应用于缺乏虚函数的类型上! (具体原因我也不知道。。哈哈哈)
    2. 如果你需要转换一个不涉及继承体制的请使用:static_cast

    reinterpret_cast

    用于转换“函数指针”
    该操作符与编译平台息息相关,所以并不具有移植性!

  • 相关阅读:
    VS2013安装与部署工具中添加 vcredist_x64.exe
    ZeroMQ高水位标记(high-water mark,HWM)
    Ubuntu16.04 动态链接库(.so)查询路径设置
    ubuntu16.04开机启动字符界面
    python 全局搜索路径
    learning to rank
    数据集
    hadoop streaming 文档
    机器学习:一些感想
    矩阵分解 推荐
  • 原文地址:https://www.cnblogs.com/skyhuangdan/p/6295056.html
Copyright © 2011-2022 走看看