博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++中static_cast, dynamic_cast使用方法
阅读量:4930 次
发布时间:2019-06-11

本文共 1024 字,大约阅读时间需要 3 分钟。

前言

Android的Framework层源代码中有非常多强制类型转换函数的调用。写惯了C代码的人一般都习惯以下这样的强制转换方式:

double a = 89;int b = (int)a;

可是。在C++代码中,不推荐使用C这样的(type-id)的强制转换风格代码,更推荐使用C++的标准类型转换符:static_cast和dynamic_cast。


static_cast

static_cast的函数原型例如以下

static_cast
(expression)

说明

该运算符把expression转换为type-id类型。

详细使用方法例如以下

  • 用于类层次结构中基类和子类之间指针或引用的转换。向上转型(把子类的指针或引用转换成基类表示)是安全的;向下转型(把基类指针或引用转换成子类指针或引用)时,因为没有动态类型检查。所以是不安全的。

  • 用于基本数据类型之间的转换。
  • 把void指针转换成目标类型的指针。

演示样例

// 1. 类转换class Base {};class Child : public Base {};Child *a = new Child();Base *b = static_cast(a);// 2.基本类型转换int i = 5;double r = static_cast
(i);// 3. void* 类型转换void *p = &i;int *s = static_cast
(p);

dynamic_cast

dynamic_cast的函数原型例如以下

dynamic_cast
(expression)

说明

该运算符把expression转换成type-id类型的对象。type-id必须是类的指针、类的引用或者void *。假设type-id是类指针类型,那么expression也必须是一个指针,假设type-id是一个引用,那么expression也必须是一个引用。

备注

因为在Android源代码中我没有看到dynamic_cast的使用,所以这里就不正确dynamic_cast的使用做举例了。

转载于:https://www.cnblogs.com/liguangsunls/p/7347576.html

你可能感兴趣的文章
javascript 简单认识
查看>>
tomcat 系统架构与设计模式 第二部分 设计模式 转
查看>>
scanf中的%[^\n]%*c格式
查看>>
启动Eclipse报Initializing Java Tooling错误解决方法
查看>>
用jquery来实现类似“网易新闻”横向标题滑动的移动端页面
查看>>
(原)基于物品的协同过滤ItemCF的mapreduce实现
查看>>
CSS可以和不可以继承的属性
查看>>
eclipse每次当我按ctrl+鼠标点击代码,自动关闭,产生原因及解决办法!!
查看>>
hbase
查看>>
用PHP将Unicode 转化为UTF-8
查看>>
HDOJ1002 A+B Problem II
查看>>
ADB server didn't ACK(adb不能开启
查看>>
网页内容抓取
查看>>
分布式和集群的区别
查看>>
Python基础(三)
查看>>
Sql server在cmd下的使用
查看>>
【BZOJ 1019】 1019: [SHOI2008]汉诺塔 (DP?)
查看>>
swing
查看>>
Continuous integration
查看>>
前端知识点总结
查看>>