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 是用来在类的继承关系中安全的向下转换。
示例代码见上一个博文。