C++强制类型转换

C++同时提供了四种新的强制转型形式(通常称为新的或C++风格的强制转型):

const_cast(expression)

dynamic_cast(expression)

reinterpret_cast(expression)

static_cast(expression)

每一种适用于特定的目的。

 

dynamic_cast主要用于执行“安全的向下转型(safe downcasting)".也就是说要确定一个对象是否是一个继承体系中的一个特定类型。它是唯一不能用旧风格语法执行的强制转型,也是唯一可能有重大运行时代价的强制转型。

 

static_cast可以用于强制隐型转换(例如,non-const对象转型为const对象,int转型为double,等等),它还可以用于很多这样的转换的反向转换(例如,void*指针转型为类型指针,基类指针转型为派生类指针)。但是它不能将一个const对象转型为non-const对象(只有const_cast能做到)。它最接近于C-style的转换。

 

const_cast一般用于强制消除对象的常量性。它是唯一能做到这一点的C++风格的强制转型。

 

reinterpret_cast是特意用于底层的强制转型,导致实现依赖(implementation-dependant)(就是说,不可移植)的结果。例如,将一个指针转型为一个整数。这样的强制转型在底层代码以外应该极为罕见。

 

旧风格的强制转型依然合法,但是新形式更可取。首先,在代码中它们更容易识别,这样就简化了在代码中寻找类型系统被破坏的地方的过程。第二,更精确地指定每个强制转型的目的,使得编译器诊断使用错误成为可能。

你可能感兴趣的:(C++,c,C#)