zoukankan      html  css  js  c++  java
  • 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.
  • 相关阅读:
    Interview with BOA
    Java Main Differences between HashMap HashTable and ConcurrentHashMap
    Java Main Differences between Java and C++
    LeetCode 33. Search in Rotated Sorted Array
    LeetCode 154. Find Minimum in Rotated Sorted Array II
    LeetCode 153. Find Minimum in Rotated Sorted Array
    LeetCode 75. Sort Colors
    LeetCode 31. Next Permutation
    LeetCode 60. Permutation Sequence
    LeetCode 216. Combination Sum III
  • 原文地址:https://www.cnblogs.com/hit-ycy/p/10846466.html
Copyright © 2011-2022 走看看