static_cast:最常用的非多态转换
static_cast 是最常用的类型转换运算符,主打非多态场景的类型转换,编译期间就会做合法性检查,能替代 C 语言中普通的类型转换。
适用场景
- 基本数据类型之间的转换(如
int和float互转); - 将任意类型转换为
void类型; - 空指针(或
void*)与具体类型指针的转换; - 类继承体系中向上转换(派生类 → 基类,天然安全)。
代码示例
#include <iostream>
using namespace std;
int main() {
// 1. 基本数据类型转换
float floatNum = 3.14f;
int intNum = static_cast<int>(floatNum);
cout << "float → int: " << intNum << endl; // 输出:3(小数被截断)
intNum = 5;
floatNum = static_cast<float>(intNum);
cout << "int → float: " << floatNum << endl; // 输出:5.0
// 2. 空指针与具体指针转换
void* voidPtr = nullptr;
int* intPtr = static_cast<int*>(voidPtr);
cout << "void* → int*: " << intPtr << endl; // 输出:0(nullptr)
return 0;
}
注意点
类继承中向下转换(基类 → 派生类)时,
static_cast不做运行时检查。如果转换逻辑错误,会导致未定义行为(此时应该用dynamic_cast)。
reinterpret_cast:底层位模式的重新解释
reinterpret_cast 主打底层位模式的重新解释,它不做数据转换或类型检查,完全是按位硬转,因此风险很高,仅用于特殊底层场景。


