C++笔记9--类型强转(type cast)
来源:互联网 发布:南方报业招聘网络编辑 编辑:程序博客网 时间:2024/06/06 01:26
C++笔记9--类型强转(type cast)
声明:本文档由王桂林老师编写的C++课件,经整理而出。
类型转换有C风格的,当然还有C++风格的。
C风格的转换的格式很简单(TYPEEXPRESSION),但是C风格的类型转换有不少的缺点,有的时候用C风格的转换是不合适的,
因为它可以在任意类型之间转换,比如你可以把一个指向 const 对象的指针转换成指向非const 对象的指针, 把一个指向基类对象的指针转换成指向一个派生类对象的指针, 这两种转换之间的差别是巨大的,
但是传统的C语言风格的类型转换没有区分这些。还有一个缺点就是,C风格的转换不容易查找,他由一个括号加上一个标识符组成,
而这样的东西在C++程序里一大堆。所以C++为了克服这些缺点,引进了新的类型转换操作符。
静态类型转换
语法格式:
static_cast<目标类型> (标识符)
转化规则:
在一个方向上可以作隐式转换,在另外一个方向上就可以作静态转换。
int a = 10;int b = 3;cout<<static_cast<float>(a)/b<<endl; //float = int int = floatreturn 0;int *p; void *q;p = static_cast<int*>(q);char *p = static_cast<char*>(malloc(100));
语法格式:
reinterpret_cast<目标类型> (标识符)
转化规则:
通常为操作数的位模式提供较低层的重新解释”也就是说将数据以二进制存在形式
的重新解释,在双方向上都不可以隐式类型转换的,则需要重解释类型转换。
int main(){ int x = 0x12345648; char *p = reinterpret_cast<char*>(&x); //char*p = static_cast<char*>(&x); printf("%x\n",*p); int a[5] = {1,2,3,4,5}; int *q = reinterpret_cast<int*>((reinterpret_cast<int>(a) +1)); printf("%x\n",*q); return 0;}
语法格式:
const_cast<目标类型> (标识符) //目标类类型只能是指针或引用。
语法规则:
用来移除对象的常量性(cast away the constness)使用 const_cast 去除 const 限定的
目的不是为了修改它的内容,使用 const_cast 去除 const 限定,通常是为了函数能够接受这个实际参数。
应用场景:
#include <iostream>using namespace std;void func(int & ref) //别人己经写好的程序或类库{ cout<<ref<<endl;}int main(void){ const int m = 4444; func(const_cast<int&>(m)); return 0;}
动态类型转换
语法格式:
dynamic_cast<目标类型> (标识符)
用于多态中的父子类之间的强制转化。
0 0
- C++笔记9--类型强转(type cast)
- C和C++语言的强制类型转换 Type Cast
- [C#]强类型
- Type Cast
- ToArray(type) 方法返回强类型数组
- C++重载类型转换操作符(type cast operator
- Kotlin-28.类型检查和转换(Type Cast)
- c++ 类型转换(c cast static_cast dynamic_cast)
- 明晰C语言中的floor, ceil和type cast
- 明晰C语言中的floor, ceil和type cast
- C语言中强类型&弱类型
- C++类型强转
- null类型强转
- C#类型强转
- scala 类型强转
- cast of Objective-C pointer type 'NSString *' to C pointer type 'CFStringRef' (aka 'const struct __C
- C++--类型转换(Type Casting)
- Type cast in C++
- JackSon fasterxml学习
- 2016年iOS技术圈回顾
- tyvj 1005采药(01背包)
- adb 版本更新后执行依旧是旧版本解决方法
- Mongodb集群搭建的三种方式
- C++笔记9--类型强转(type cast)
- 跨域访问越权问题
- 打包mysql、tomcat、jdk为一个软件
- 关于ajax里面嵌套ajax
- chmod
- MySQL 行级锁的使用以及死锁的预防
- Delphi 执行控制台(console)程序获取返回结果
- Retrofit2网络框架的使用(一)
- 请问WCF 跟 WebService之间异同