在C++中,类型转换是编程语言中的一个重要概念,它允许我们将一种数据类型的值转换为另一种数据类型。C++提供了四种主要的类型转换方式:静态类型转换(Static Cast)、动态类型转换(Dynamic Cast)、常量类型转换(Const Cast)和重新解释类型转换(Reinterpret Cast)。每种转换都有其特定的用途和限制。
1. 静态类型转换(Static Cast)
静态类型转换用于在编译时完成类型的转换,主要用于基本数据类型之间的转换,以及有明确定义转换关系的类之间的转换(如派生类指针或引用转换为基类指针或引用,但基类指针或引用不能安全地转换回派生类指针或引用,除非使用动态类型转换)。它不会进行运行时类型检查,因此如果转换不合法,编译时可能不会报错,但运行时可能会出现问题。
cpp复制代码
double d = 3.14; |
|
int i = static_cast<int>(d); // 将double转换为int |
2. 动态类型转换(Dynamic Cast)
动态类型转换主要用于具有多态性的类之间的向下转换(即基类指针或引用转换为派生类指针或引用)。它会在运行时检查转换的安全性,如果转换是不安全的(即基类指针或引用实际上并不指向派生类对象),则转换会失败。对于指针类型,转换失败时返回nullptr;对于引用类型,如果转换失败,则会抛出std::bad_cast
异常(但在实践中,由于动态类型转换通常用于指针,因此引用形式的动态类型转换较少见)。
cpp复制代码
Base* basePtr = new Der |