• C++ 之 强制转换


            C语言当中的强制转换基本没有任何的限制,只需要一个括号即可,而在C++中,对强制转换有了一定的限制,这样避免了我们在使用时造成的不明确问题,同时也增加了代码的可读性。一共有四种,分别时static_cast、reinterpret_cast、const_cast、dynamic_cast。

    1.static_cast转换

          可以实现相同类型之间的转换,如:double b ;int  a = static_cast<int>(b); 

    2.reinterpreter_cast 转换

         可以实现不同类型之间的转换,如指针到整型

    int* aas = new int[1] ;
    aas[0] = 1;
    int b = reinterpret_cast<int>(aas);   ////b中的值为aas 指针的地址

    3.const_cast 转换

           const_cast 中的类型必须时指针、引用或指向对象成员类型的指针

    const int constA = 10;
    const int *pConstA = &constA;
    int* b = const_cast<int*>(pConstA);
    *b = *b + 1;
    printf("%d ,%d",constA,*b);/////10  11     可以发现constA中的值并没有发生变化,因为constA是一个常量,若constA没有const的修饰,最后的结果将是11  11 

    4.dynamic_cast 转换

          dynamic_cast实现的是多态类之间的的转换

    对于“向上转换”(即派生类指针或引用类型转换为其基类类型),无论是指针还是引用向上转换都是安全地。

    对于“向下转型”有两种情况:
    一种是基类指针所指对象是派生类类型的,这种转换是安全的;
    另一种是基类指针所指对象为基类类型,在这种情况下dynamic_cast在运行时做检查,转换失败,返回结果为0;
    https://blog.csdn.net/u010275850/article/details/49452373    我觉得这篇博客对于dynamic_cast的转换好理解

    To get,you have to give.To give,you need learn to insist.If you really find it is hard for you,then you quit.But once you quit.Don't complain.
  • 相关阅读:
    Banner实现无线轮播
    二维码生成
    自定义View圆环
    百度地图
    OkHttp解析
    自定义控件生成随机数
    OkHttp中文文档
    Da购物车
    Angular过滤器
    popupWindow
  • 原文地址:https://www.cnblogs.com/hit-ycy/p/10846466.html
Copyright © 2020-2023  润新知