c++ 类型转换
来源:互联网 发布:ftp主进程端口 编辑:程序博客网 时间:2024/06/05 18:35
类型转换操作
a = dynamic_cast<T*>(p)
Try to convert p into a T*. It may return 0
a = dynamic_cast<T&>(*p)
Try to convert *p into a T&. It maythrow bad_cast
a = static_cast<T>(p)
Convert p into a T if a T can be contertedinto p's type.
a = reinterpret_cast<T>(p)
Convert p into a T represented by the samebit pattern.
a =const_cast<T>(p)
Convert p into a T by adding or subtractingconst.
a = (T)v
C-style cast.
a = T(v)
Functional cast.
const_cast
const_cast 用来去掉对象的const 限制,c++中只有此操作符可以完成这个功能。
其语法格式为:
const_cast < type-name > (expression)
示例代码如下:
#include <iostream>#include <cstring>using namespace std;int main () {string str("A123456789");const char *cstr = str.c_str();char *nonconst_cstr = const_cast<char *> (cstr) ; *nonconst_cstr ='B';cout << nonconst_cstr << endl;return 0;}reinterpret_cast
reinterpret_cast 是一种比较低级的转换,这种转帐非常不可靠,个人建议少用。
其语法格式为:
reinterpret_cast < type-name > (expression)
示例代码:
#include <iostream>using namespace std;struct data {short a; short b;};int main () {long value = 0xA2345678;data* pdata = reinterpret_cast<data*> (&value);cout << pdata->a << endl;return 0;}static_cast
static_cast 用来强制的内存转换,如:non-const 对象到 const 对象,int 到double.此操作可以完成除const 到 non-const的所有转换。
语法格式:
static_cast < type-name > (expression)
示例代码:
class Base {};class Derived : public Base {};class UnrelatedClass {};int main() {Base base;Derived derived;// #1: valid upcastBase *pBase = static_cast<Base *>(&derived); // #2: valid downcastDerived *pDerived = static_cast<Derived *> (&base);// #3: invalid, between unrelated classesUnrelatedClass *pUnrelated = static_cast<UnrelatedClass *> (&derived);}
通过此示例代码可以得知:static_cast 可以在继承类间向上转换,向下转换但不能在不相关类之间做转换。
dynamic_cast
dynamic_cast 是用来在类的继承关系中安全的向下转换。
示例代码见上一个博文。
- <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
- 编码的新神器——Sublime Text2
- XML namespace的问题
- ORACLE约束的属性
- PDA系统之现场测试--跳跃性成长的过程(一)
- IO系统_文件的切割和合并
- c++ 类型转换
- poj 2886
- 基于网络的Linux自动化安装
- js操作DropDownList大全
- Java异常处理中,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- asp.net mvc 出现 HTTP 404
- getRequestDispatcher()与sendRedirect()的区别
- PDA系统之现场测试--跳跃性成长的过程(二)
- C++_对象与类