欢迎来到代码驿站!

当前位置:首页 >

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

时间:2020-07-24 10:00:59|栏目:|点击:

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;

上一篇:小程序实现简单语音聊天的示例代码

栏    目:

下一篇:R语言ggplot2边框背景去除的实现

本文标题:C++ xxx_cast实现转换代码实例解析

本文地址:http://www.codeinn.net/misctech/2499.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有