常见使用场景
- 基本数据类型转换:用于将一种基本数据类型转换为另一种基本数据类型,例如将
int
转换为float
,或者float
转换为int
等。
- 指针类型转换:在具有继承关系的类之间进行指针类型转换,例如将派生类指针转换为基类指针,或者在没有多态的情况下将基类指针转换为派生类指针(这种转换存在风险,需谨慎使用)。
- 将
void*
指针转换为其他类型指针:在需要将通用指针void*
转换为特定类型指针时使用。
使用注意事项
- 安全性:
static_cast
不进行运行时类型检查,所以在进行指针类型转换时,如果转换不正确,可能会导致未定义行为,特别是在将基类指针转换为派生类指针时。
- 数据丢失:在基本数据类型转换时,如将浮点数转换为整数,可能会发生数据截断,丢失小数部分。
代码示例
基本数据类型转换
#include <iostream>
int main() {
int numInt = 10;
float numFloat = static_cast<float>(numInt);
std::cout << "将int转换为float: " << numFloat << std::endl;
float floatValue = 10.5f;
int intValue = static_cast<int>(floatValue);
std::cout << "将float转换为int: " << intValue << std::endl;
return 0;
}
指针类型转换(派生类指针转基类指针)
#include <iostream>
class Base {
public:
virtual void print() {
std::cout << "Base class" << std::endl;
}
};
class Derived : public Base {
public:
void print() override {
std::cout << "Derived class" << std::endl;
}
};
int main() {
Derived* derivedPtr = new Derived();
Base* basePtr = static_cast<Base*>(derivedPtr);
basePtr->print();
delete derivedPtr;
return 0;
}