显式类型转换
所有六种类型转换都有一个共同点:
- 转换为左值引用类型,如
dynamic_cast<Derived&>(base)
,产生左值。因此,当你想要对同一个对象执行某些操作但将其视为不同的类型时,你将转换为左值引用类型。 - 转换为右值引用类型,如
static_cast<string&&>(s)
,产生右值。 - 转换为非引用类型(如
(int)x
)会产生一个 prvalue,可以将其视为正在转换的值的副本,但其类型与原始值不同。
reinterpret_cast
关键字负责执行两种不同的不安全转换:
- 该 类型双关 的转换,其可以被用于访问一个类型的存储器,就好像它是一个不同的类型。
- 换算整数类型和指针类型之间 ,在任一方向。
static_cast
关键字可以执行各种不同的转换:
-
基于派生的转换
-
对于
void
,它丢弃了表达式的值。// on some compilers, suppresses warning about x being unused static_cast<void>(x);
-
在算术类型和枚举类型之间,以及不同的枚举类型之间。请参阅枚举转换
-
从指针到派生类的成员,到指向基类成员的指针。指向的类型必须匹配。请参阅派生到基本转换以获取指向成员的指针
Version >= C++ 11
- 从左值到 x 值,如
std::move
。请参阅移动语义 。