C++中的强制类型转换
来源:互联网 发布:如何在淘宝网上卖东西 编辑:程序博客网 时间:2024/05/29 16:21
static_cast:
可以将值从一种数据类型转换到另一种数据类型
例:
int i;
Char c = static_cast<char> (i);
*当 static_cast<type> (value)中type和value所属类型可以隐式转换时(单向即可),本转换才是合法的。
其他的 3个,如果type放的不是 指针 或者引用的话,就会报错(VS)。
dynamic_cast:
将基类类型的指针或者引用安全的转换为派生类类型的指针或者引用 (vs中type必须为动态的)
运行时类型识别:RTTI
有虚函数的情况 :运行时
没有虚函数的情况: 编译时,静态(VS中编译就不过)
指针:
如果转换失败 则返回 0 即空指针
引用:
如果转换失败 则抛出 bad_cast异常 reinterpret_case
用于天生危险的类型转换。
例:
structdat{short a; short b};
long value = 0x05A224B118;
Dat *pd = reinterpret_case<dat *>(&value);
Cout<<pd->a<<endl;
通常这种转换是适用于实现的底层编程技术。比如上例,在不同的大小端的环境中 运行结果是不同的。
注:它不支持所有的类型转换 ,比如:
1不允许删除count
2.不能将函数指针和数据指针之间转换
3.可以将指针类型转换成int但是不能转成更小的char或者浮点型。
const_cast:
由于编程中可能无意间同时改变类型和常量特征,因此使用const_cast更安全。
可以修改指向一个值的指针,但修改const值的结果是不确定的(C++标准指出这种行为是不确定的)
也就是修改 有可能成功,也有可能不成功。
intia = 10;
Const int ca = 100;
Void change(const int * pt ) {
int * pi = null;
pi = const_cast<int *>(pt);
*pi = 0;// const_cast
void main () {
Change(&ia);//0
Change(&ca);// 100}
//-------------------------------------------------------------
个人的理解,欢迎指正交流。如有转载,请注明出处。
- C中的类型强制转换
- [强制类型转换]C语言中的强制类型转换相关
- C语言中的强制类型转换
- 关于c语言中的强制类型转换
- C语言中的强制类型转换
- c++-----强制类型转换
- 【C++】强制类型转换
- C 强制类型转换
- C 强制类型转换
- C 强制类型转换
- C/C++强制类型转换中的安全隐患一例
- C++中的强制类型转换
- C++中的类型强制转换
- C++中的强制类型转换
- Java中的强制类型转换
- AS3中的强制类型转换
- C++中的强制类型转换
- c++中的强制类型转换
- ATL技术内幕 第五部分 (完结篇)
- Hibernate入门BLOG[九、Hibernate对象关系多对一映射]
- sd/mmc初始化
- DX控件单选按钮的使用
- 特征检测和跟踪经典理论
- C++中的强制类型转换
- 线程详解
- Flashbot让批量预装应用更简单
- 关于servlet纠结的一个问题
- 【Android应用开发】-(13)屏幕截图功能--截取全屏,无需Root(附源码)
- android 点击后获取焦距使用
- 本人的“协同智慧观”建立在“人脑智力观”和“电脑智能观”及其广义双语协同处理的基础之上。
- C++ 11 右值引用的理解
- epoll两种触发方式