• c++中四种xxx_cast转换


    1.1 static_cast

      static_cast可以在一个方向上实现隐式转换,在另一个方向上实现静态转换。其适用于单隐和双隐两种情况。

    •  双隐

        双隐即两边都可以直接进行隐式转换,适用于一般类型的数据转换(如int, float, double, long等数据类型之间的转换)

    • 单隐

        单隐即只能在一个方向上进行隐式转换,在另一个方向上只能实现静态转换。(如void* 和指针之间的转换,任意类型的指针可以转换为void*,但是void*不能转换为任意类型的指针,因此将void*转换为任意类型的指针时就需要调用静态转换)

     1     //首先要验证的是static_cast,其可以实现在一个方向上做隐式转换,另一个方向上做静态转换,可以适用于单隐和双隐两种情况
     2 
     3     //首先是双隐,也就是两边都能直接进行隐式转换,一般适用于基本数据类型,如
     4     int a = 4;
     5     double b = 3.2;
     6     a = b;
     7     b = a;
     8     cout << a << endl;
     9     cout << b << endl;
    10     a = static_cast<int> (b);
    11     b = static_cast<double> (a);
    12 
    13     //然后是单隐,也就是说,只能从一遍到另一边进行隐式转换
    14     //任意类型的指针可以转换为void*,但是void*不能转换为任意类型的指针
    15     void* p = &b;
    16     int* q = &a;
    17     p = q;
    18     q = static_cast<int*>(p);

    1.2 reinterpret_cast

      reinterpret_cast“通常为操作数的位模式提供较底层的重新解释”-->也就是说将数据以二进制的形式重新解释,在双方向上都不可以隐式类型转换的,则需要重新类型转换。可以实现双不隐的情况,如int转指针,指针转int等。

    1 //双不隐
    2     int *m=&a;
    3     int n=4;
    4     m = reinterpret_cast<int*>(n);
    5     n = reinterpret_cast<int>(m);

    1.3 const_cast

      Const_cast可用来移除const对象的引用或指针的常量性。其可以将const变量转换为非const变量。其可以用于去除指针和引用的constconst_cast是对const的语义补充。其目标类型只能是引用或指针。

      非const对象 --> const引用或指针 --> const --> 修改非const对象

     1 //const_cast-->用于去除非const对象的const,用于指针和引用
     2     /************ 第一种情况,去引用的const化 ************/
     3     int aa;
     4     const int& ra = aa;
     5     aa = 100;
     6     cout << aa << endl;
     7     cout << ra << endl;
     8     //ra = 200;//这样是错误的,因为ra是const,要实现ra的修改,必须去const化
     9     const_cast<int&> (ra) = 300;
    10     cout << aa << endl;
    11     cout << ra << endl;
    12 
    13     /************ 第二种情况,去指针的const化 ************/
    14     const int* pp = &a;
    15     //*p = 200;//这样是错误的,因为指针p是const类型,要实现p的修改,必须去const化
    16     *const_cast<int*>(pp) = 500;
    17     cout << *pp << endl;
  • 相关阅读:
    实习感悟——从用户中来,到用户中去
    FineUI PK DWZ
    Java入门到精通——工具篇之Maven概述
    信息论的熵
    菜鸟学习Hibernate——一对多关系映射
    StyleCop学习笔记——默认的规则
    StyleCop学习笔记——自定义规则
    StyleCop学习笔记——初识StyleCop
    好博客收藏
    菜鸟学习Hibernate——简单的增、删、改、查操作
  • 原文地址:https://www.cnblogs.com/Cucucudeblog/p/13356824.html
Copyright © 2020-2023  润新知