C++的显示转换(第一次)
来源:互联网 发布:大数据广告投放 编辑:程序博客网 时间:2024/04/30 03:40
C++当中的转换复杂,容易混淆,更容易出错,今天对<<C++编程思想>>进行了相关的阅读与理解,现记录初步的理解如下:
C++当中的显示类型转换的目的就是要告诉编译器:我来接管你的类型检查,你少管我,我现在已经长大了,做的事情是不是合法的我自己知道,你应该把我当成年人看待。所以,即使我做错了转换,编译器也不会报错或者是提出警告,这个时候更要考察作为程序员的我们的检查能力了。
(1)static_cast
它用于明确定义的转换,包括典型的非强制转换、窄化转换、使用void*的强制转换、隐式类型转换、类层次的静态定位。
注意,它不可用在没有继承关系的对象指针之间互换,这个时候可以借助于void*的转换
void func(int i) {}
int main(){
int i=0x7fff;
long l;
float f;
//非强制转换
l=i;
f=i;
l=static_cast<long> (i);//同上边的等价
f=static_cast<float> (i);//同上边等价
//窄化转换
i=l;//可能会丢失信息
i=f;
i=static_cast<int>(l);
i=static_cast<int>(f);
//使用void*的强制转换
void *vp=&i;
float *fp=(float*)vp;//一个危险的转换
fp=static_cast<float*>(vp);//一个危险的转换,但是我们这里使用的
//是显示的方式,便于调试
}
(2)const_cast
它唯一允许的转换:若从const转换为非const或从volatile转换为非volatile,可以使用const_cast.
需要注意的是:const_cast转换的源均为地址型值。
(3)reinterpret_cast
它是一种最不安全的转换机制,最有可能出现问题了。它的工作原理为:将对象假设为模式,仿佛是一种完全不同的类型的对象。它是低级的位操作。
(4)dynamic_cast
一种安全类型向下转换操作。当使用dynamic_cast试着向下类型转换一个特定的类型时,仅当类型转换是正确的并且成功的时候,返回值是一个指向所需类型的指针,否则它将返回0来表示这并不是正确的类型。
并且要注意的是,使用dynamic_cast的时候,必须对一个真正多态的层次进行操作(即该类应该含有虚函数),因为dynamic_cast使用了存储在VTABLE当中的信息以判断实际的类型。
但是,dynamic_cast运行时较static_cast的开销更大,我们可以通过static_cast来代替dynamic_cast,只要我们知道处理的是何种类型。
- C++的显示转换(第一次)
- C++【显示类型转换】
- 第一次启动APP时显示的页面
- C++的显示转换
- C++的显示转换
- Android—edittext第一次显示不显示光标的
- 各种格式时间/日期的显示及转换(C/C++)
- 第一次写对C的感觉!
- 与C++/CLI的第一次接触
- 我的第一次C语言课
- 五子棋 第一次用C编写的小游戏
- 第一次c语言课的感触
- c++中的显示转换
- c++中的显示转换
- <C++>十进制数转换成二进制显示
- C#_lesson1_显示转换和隐式装换
- 【C++Primer Ch5表达式】类型转换:显示转换
- C、C++中的隐式转换和显示转换
- 动态规划解整数划分
- 右键打开方式无法选择程序
- AC解 - Phone List(HDOJ#1671)前缀树的一个应用
- 清除垃圾文件小脚本
- joomla源代码探析(一) 准备工作
- C++的显示转换(第一次)
- [转]海量数据库的查询优化及分页算法方案
- joomla源代码探析(二) 目录结构
- joomla源代码探析(三) 万源之源
- Linux下Tomcat安装与启动
- mysql中列出所有表格的对应字段
- 数据指针(内存操作)
- sql比较两个字符串.txt
- CRM系统的两个核心