gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章C++ xxx_cast实现转换代码实例解析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

1.1 static_cast 。

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

双隐 。

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

单隐 。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//首先要验证的是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等.

?
1
2
3
4
5
//双不隐
   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对象 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//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;

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

原文链接:https://www.cnblogs.com/Cucucudeblog/p/13356824.html 。

最后此篇关于C++ xxx_cast实现转换代码实例解析的文章就讲到这里了,如果你想了解更多关于C++ xxx_cast实现转换代码实例解析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com