c++中四种xxx_cast转换
2021-04-12 06:29
标签:stat 常量 对象 隐式 现在 方向 需要 形式 基本数据类型 static_cast可以在一个方向上实现隐式转换,在另一个方向上实现静态转换。其适用于单隐和双隐两种情况。 双隐即两边都可以直接进行隐式转换,适用于一般类型的数据转换(如int, float, double, long等数据类型之间的转换) 单隐即只能在一个方向上进行隐式转换,在另一个方向上只能实现静态转换。(如void* 和指针之间的转换,任意类型的指针可以转换为void*,但是void*不能转换为任意类型的指针,因此将void*转换为任意类型的指针时就需要调用静态转换) reinterpret_cast“通常为操作数的位模式提供较底层的重新解释”-->也就是说将数据以二进制的形式重新解释,在双方向上都不可以隐式类型转换的,则需要重新类型转换。可以实现双不隐的情况,如int转指针,指针转int等。 Const_cast可用来移除非const对象的引用或指针的常量性。其可以将const变量转换为非const变量。其可以用于去除指针和引用的const,const_cast是对const的语义补充。其目标类型只能是引用或指针。 非const对象 --> const引用或指针 --> 脱const --> 修改非const对象 c++中四种xxx_cast转换 标签:stat 常量 对象 隐式 现在 方向 需要 形式 基本数据类型 原文地址:https://www.cnblogs.com/Cucucudeblog/p/13356824.html1.1 static_cast
1 //首先要验证的是static_cast,其可以实现在一个方向上做隐式转换,另一个方向上做静态转换,可以适用于单隐和双隐两种情况
2
3 //首先是双隐,也就是两边都能直接进行隐式转换,一般适用于基本数据类型,如
4 int a = 4;
5 double b = 3.2;
6 a = b;
7 b = a;
8 cout endl;
9 cout endl;
10 a = static_castint> (b);
11 b = static_castdouble> (a);
12
13 //然后是单隐,也就是说,只能从一遍到另一边进行隐式转换
14 //任意类型的指针可以转换为void*,但是void*不能转换为任意类型的指针
15 void* p = &b;
16 int* q = &a;
17 p = q;
18 q = static_castint*>(p);
1.2 reinterpret_cast
1 //双不隐
2 int *m=&a;
3 int n=4;
4 m = reinterpret_castint*>(n);
5 n = reinterpret_castint>(m);
1.3 const_cast
1 //const_cast-->用于去除非const对象的const,用于指针和引用
2 /************ 第一种情况,去引用的const化 ************/
3 int aa;
4 const int& ra = aa;
5 aa = 100;
6 cout endl;
7 cout endl;
8 //ra = 200;//这样是错误的,因为ra是const,要实现ra的修改,必须去const化
9 const_castint&> (ra) = 300;
10 cout endl;
11 cout endl;
12
13 /************ 第二种情况,去指针的const化 ************/
14 const int* pp = &a;
15 //*p = 200;//这样是错误的,因为指针p是const类型,要实现p的修改,必须去const化
16 *const_castint*>(pp) = 500;
17 cout