C++类型转换
来源:互联网 发布:网络基础知识面试题 编辑:程序博客网 时间:2024/06/06 01:48
1. 隐式类型转换
1) 算数转换:在混合类型的算术表达式中, 最宽的数据类型成为目标转换类型
2) 赋值转换:目标类型是被赋值对象的类型
3) 参数传递转换:形参和实参类型不一致:目标转换类型为形参的类型
4) 函数返回值转换:目标转换类型为函数的返回类型
2. 显式类型转换(强制类型转换)
C 风格:(type)expression
C++风格:cast-name<type>expression
cast-name包含static_cast、dynamic_cast、const_cast、reinterpret_cast
1) static_cast:把expression转换为type类型,但没有运行时类型检查来保证转换的安全性
主要有如下几种用法:
a) 用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成子类指针或引用)时,由于没有动态类型检查,所以是不安全的。
b) 用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。
c) 把void指针转换成目标类型的指针(不安全!!)
d) 把任何类型的表达式转换成void类型
static_cast不能转换掉expression的const、volitale、或者__unaligned属性
2) dynamic_cast:把expression转换成type类型的对象。type必须是类的指针、类的引用或者void *;如果type是类指针类型,那么expression也必须是一个指针,如果type是一个引用,那么expression也必须是一个引用
主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换
在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全
3) const_cast:用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type和expression的类型是一样的
4) reinpreter_cast:将数据从一种类型的转换为另一种类型。所谓“通常为操作数的位模式提供较低层的重新解释”也就是说将数据以二进制存在形式的重新解释
例:将指针p的值以二进制(位模式)的方式被解释为整型,并赋给i
int i;
char *p = "Thisisanexample.";
i = reinterpret_cast<int>(p);
0 0
- <C/C++> 类型转换
- C/C++:类型转换
- C类型转换
- C#.NET 类型转换
- 类型转换(C#)
- C指针类型转换
- 类型转换--c语言
- C语言类型转换
- C语言类型转换
- C/C++类型转换
- C语言类型转换
- C++_类型转换
- objective-c 类型转换
- objective-c类型转换
- 标准C 类型转换
- c类型转换
- C类型转换
- c类型转换char2short
- Object.constructor
- LeetCode解题记录(4)
- 贪心算法原理
- WPF DataGrid 控件默认空白行无法显示
- NSNotificationCenter几点说明
- C++类型转换
- switch-case中变量的初始化
- java jar包 war包
- 关于神经网络的一点猜想
- Linux之旅--SS5 Socket Server入门指南
- 安卓--oom问题
- VC++6.0 移位操作
- 分开或许是选择
- HBase--客户端API(基础知识)