C++ Casting Operators

| 分类 C++  | 标签 C++_data_types 

在c++中,有旧式的转型,例如(int)a之类的用法,将变量a的类型转换成了int类型。也有新式的转型,例如static_cast之类的。

要注意的是,首先要少用转型,如果真的要用转型的话,也尽量用新式的转型,方便到时grep代码找到是在哪里进行的类型转换。

关于static_cast, const_cast, _dynamic_cast和reinterpret_cast的介绍可以参考链接

static_cast

static_cast是一个compile time cast,同时由于它没有做run time check,所以在对class指针进行转换的时候它是不能保证安全性的,需要程序员自己去检查。所以一般都是用来进行一些简单的数据类型转换,例如将enum转成int之类的。

dynamic_cast

dynamic_cast是一个run time cast,而且由于它会进行一个run time check,所以它的开销比较大,运行速度较慢。而且它仅仅能够转换指针和引用。它的语法如下所示:

dynamic_cast < type-id > ( expression )

它将expression转化成一个类型是type-id的instance。其中type-id一定是一个指向class的指针或者引用,又或者是一个void*空指针。根据type-id的类型,expression一定是个指针或者是个左值。它常用来根据继承的关系做一个up或者down的类型转换。up是指从derived class转换成base class,down是指从base class转换成derived class。

如果转换失败,dynamic_cast会返回一个nullptr。通常来讲,从derived class up回base class是安全的,但是从base class down到derived class是会失败的,会返回一个nullptr。如果是多重继承,有ambiguous的风险的话,编译器需要我们手动转换路径,具体可参考上面的链接。

const_cast

const_cast的语法如下所示:

const_cast < type-id > ( expression )

它通常用于将const类型转换成非const类型。


上一篇     下一篇