c++之旅:类型的强制转换
2024-09-27 07:27:37
类型强制转换
在编程的时候我们经常遇到类型的强制转换,C++为此提供了更安全的转换方式,在编程中我们更多的应该采用C++提供的类型转换方式
基本类型转换
基本类型转换用的最多,一般将高精度转换为低精度,static_cast关键字用于基本类型转换。
float a = 1.5;
int b = static_cast<int>(a);
上面的列子将浮点型转为整型
常量类型转换
常量类型转换一般将指向变量的指针强制让其指向一个常量
const int a = 1;
const int* p1 = &a;
int* p2 = const_cast<int*>(&a);
&a的返回值是const int * ,通过**const_cast强制转换为int*类型
普通类型指针转换
使用reinterpret_cast可以将可以实现指向普通类型的指针的类型转换
int a = 0xA0B0C0D0;
char* c = reinterpret_cast<char*>(&a);
for (int i=0; i<4; i++) {
printf("%x\n", *(c+i));
}
上的示例中强制让一个char*指针指向了int型的变量,并对变量中的内容进行了访问。
对象指针类型转换
dynamic_csast运算符用于对象的向上转型或向下转型, 其主要用途是确保可以安全地调用虚函数。dynamic_cast的尖括号中必须为指针或者引用。如果是向下转型,其参数中的指针必须要有虚函数,如果转换失败则为NULL
#include <iostream>
#include <string>
using namespace std;
class Person {
public:
Person(){};
virtual ~Person(){cout << "Person" << endl;}
};
class Worker: public Person {
public:
Worker(){};
~Worker(){cout << "Worker" << endl;}
};
int main(void) {
Person* person = dynamic_cast<Person*> (new Worker());
Worker* worker = dynamic_cast<Worker*>(person); //传入的person指针对应的类必须要有虚函数
}
参考
http://www.cnblogs.com/blueoverflow/p/4712369.html
最新文章
- android ADT 无法查看第三方jar源代码
- Sql Server系列:Update语句
- roleManager与角色管理授权
- java动手动脑和课后实验型问题String类型
- ASP.NET简单实现APP中用户个人头像上传和裁剪
- Java数据结构——双端链表
- 解决SQLSERVER在还原数据时出现的“FILESTREAM功能被禁用”问题
- PHP开发第一个扩展
- TCL语言笔记:TCL中的String命令
- MYSQL 5.7 新增150多个新功能
- PowerDesigner 如何生成数据库更新脚本
- linux crond服务
- 生活中的大数据 hadoop
- 【Unity 3D】教程(1)建立场景
- Java经典编程题50道之三十九
- ONCOCNV软件思路分析之tumor处理
- 使用python对py文件程序代码复用度检查
- 计算机网络之JSONP跨域
- Jenkins时区设置为北京时间
- 从零开始搭建VUE项目
热门文章
- 响应式布局中为什么要使用em设置字体大小而不用px
- 编程之美 set 14 小飞的电梯调度算法
- visual studio 常识
- Packet for query is too large (1166 >; 1024). You can change this value
- cocos2dx-draw绘制
- ora-04021 无法锁表的解决办法
- (转)聊聊Servlet、Struts1、Struts2以及SpringMvc中的线程安全
- 前端构建工具gulpjs的使用介绍及技巧(一)
- Django中间件如何处理请求
- C# 编写 TensorFlow 人工智能应用