C++ xxx_cast实现转换代码实例解析

 更新时间:2020年07月24日 09:45:02   作者:Cucucu  
这篇文章主要介绍了C++xxx_cast转换代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1.1 static_cast

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

双隐

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

单隐

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

//首先要验证的是static_cast,其可以实现在一个方向上做隐式转换,另一个方向上做静态转换,可以适用于单隐和双隐两种情况

  //首先是双隐,也就是两边都能直接进行隐式转换,一般适用于基本数据类型,如
  int a = 4;
  double b = 3.2;
  a = b;
  b = a;
  cout << a << endl;
  cout << b << endl;
  a = static_cast<int> (b);
  b = static_cast<double> (a);

  //然后是单隐,也就是说,只能从一遍到另一边进行隐式转换
  //任意类型的指针可以转换为void*,但是void*不能转换为任意类型的指针
  void* p = &b;
  int* q = &a;
  p = q;
  q = static_cast<int*>(p);

1.2 reinterpret_cast

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

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

1.3 const_cast

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

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

//const_cast-->用于去除非const对象的const,用于指针和引用
  /************ 第一种情况,去引用的const化 ************/
  int aa;
  const int& ra = aa;
  aa = 100;
  cout << aa << endl;
  cout << ra << endl;
  //ra = 200;//这样是错误的,因为ra是const,要实现ra的修改,必须去const化
  const_cast<int&> (ra) = 300;
  cout << aa << endl;
  cout << ra << endl;

  /************ 第二种情况,去指针的const化 ************/
  const int* pp = &a;
  //*p = 200;//这样是错误的,因为指针p是const类型,要实现p的修改,必须去const化
  *const_cast<int*>(pp) = 500;
  cout << *pp << endl;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C++命名空间 缺省参数 const总结 引用总结 内联函数 auto关键字详解

    C++命名空间 缺省参数 const总结 引用总结 内联函数 auto关键字详解

    这篇文章主要介绍了C++命名空间 缺省参数 const总结 引用总结 内联函数 auto关键字详解的相关资料,需要的朋友可以参考下
    2023-01-01
  • C语言详细分析贪心策略中最小生成树的Prime算法设计与实现

    C语言详细分析贪心策略中最小生成树的Prime算法设计与实现

    最小生成树的问题还是比较热门的,最经典的莫过于Prime算法和Kruskal算法了,这篇博文我会详细讲解Prime算法的设计思想与具体代码的实现,不要求数据结构学的有多好,只要跟着我的思路来,一步一步的分析,调试,终能成就自己,那就让我们开始吧
    2022-05-05
  • C语言的isatty函数和ttyname函数以及sendmsg函数用法

    C语言的isatty函数和ttyname函数以及sendmsg函数用法

    这篇文章主要介绍了C语言的isatty函数和ttyname函数以及sendmsg函数用法,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • C++ Struct结构体用法浅析

    C++ Struct结构体用法浅析

    前边我们所定义的类,均是使用struct关键字来定义,但是C++中真正用于定义类的关键字为class,因为要C++兼容C,所以保留struct关键字,struct与class的用法完全相同
    2023-03-03
  • C语言代码实现猜数字游戏

    C语言代码实现猜数字游戏

    大家好,本篇文章主要讲的是C语言代码实现猜数字游戏,感兴趣的同学赶快来看一看了吧,对你有帮助的话记得收藏一下
    2022-01-01
  • 一文详细讲解C++精妙的哈希算法

    一文详细讲解C++精妙的哈希算法

    这篇文章主要介绍了C++精妙的哈希算法的相关资料,哈希结构通过哈希函数将关键码映射到表中的特定位置,以提高搜索效率,理想的哈希函数应保证一致性、哈希值均匀分布、高计算效率与最小化冲突,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • C++ Socket实现TCP与UDP网络编程

    C++ Socket实现TCP与UDP网络编程

    本文主要介绍了C++ Socket实现TCP与UDP网络编程,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C语言 使用qsort函数来进行快速排序

    C语言 使用qsort函数来进行快速排序

    排序方法有很多种:选择排序,冒泡排序,归并排序,快速排序等。 看名字都知道快速排序是目前公认的一种比较好的排序算法。因为他速度很快,所以系统也在库里实现这个算法,便于我们的使用。 这就是qsort函数
    2022-02-02
  • 成员函数的重载、覆盖与隐藏详细解析

    成员函数的重载、覆盖与隐藏详细解析

    成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防
    2013-10-10
  • 最大对称字符串的算法

    最大对称字符串的算法

    题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。
    2013-03-03

最新评论