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

所属分类: 软件编程 / C 语言 阅读数: 74
收藏 0 赞 0 分享

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++无法重载点符号、::、sizeof等的原因

这篇文章主要介绍了C++无法重载点符号、::、sizeof等的原因的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

实例讲解C语言编程中的结构体对齐

这篇文章主要介绍了C语言编程中的结构体对齐,值得注意的是一些结构体对齐的例子在不同编译器下结果可能会不同,需要的朋友可以参考下
收藏 0 赞 0 分享

详解C语言的结构体中成员变量偏移问题

这篇文章主要介绍了C语言的结构体中成员变量偏移问题,以讲解如何编写宏来对成员变量进行修改为主,需要的朋友可以参考下
收藏 0 赞 0 分享

详解C语言结构体中的函数指针

这篇文章主要介绍了详解C语言结构体中的函数指针,文中对函数指针的基本概念也有讲解,需要的朋友可以参考下
收藏 0 赞 0 分享

C++编程中的函数指针初步解析

这篇文章主要介绍了C++编程中的函数指针初步解析,函数指针在C语言和C++学习中都是非常重要的知识,需要的朋友可以参考下
收藏 0 赞 0 分享

实例解析C++中类的成员函数指针

这篇文章主要介绍了C++中类的成员函数指针,例子中以讨论用函数指针调用类的成员函数为主,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言中的函数指针基础学习教程

这篇文章主要介绍了C语言中的函数指针基础学习教程,包括函数指针作为参数来传递等重要知识,需要的朋友可以参考下
收藏 0 赞 0 分享

深入解析C语言中函数指针的定义与使用

这篇文章主要介绍了C语言中函数指针的定义与使用,是C语言入门学习中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

详解C语言编程中的函数指针以及函数回调

这篇文章主要介绍了C语言编程中的函数指针以及函数回调,函数回调实际上就是让函数指针作函数参数、调用时传入函数地址,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言中的函数指针学习笔记

这篇文章主要介绍了C语言中的函数指针的一些学习知识点记录,文中作者整理了一些比较interesting的函数指针用法,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多