何时在C++中使用static_cast、dynamic_cast、const_cast和reinterpret_cast?
大家好!我开始学习C++,遇到了不同的类型转换运算符。我知道C语言中有简单的括号转换,但据说在C++中需要使用特殊的运算符:`static_cast`、`dynamic_cast`、`const_cast`和`reinterpret_cast`。我完全搞混了什么时候该用哪个。
例如,我有这样的代码:
```cpp
class Base {
public:
virtual void show() { std::cout << "Base\n"; }
};
class Derived : public Base {
public:
void show() override { std::cout << "Derived\n"; }
void extra() { std::cout << "Extra\n"; }
};
int main() {
Base* basePtr = new Derived();
// 如何正确地将Base*转换为Derived*?
Derived* d1 = (Derived*)basePtr; // C风格转换——能工作,但这样对吗?
int a = 10;
double b = (double)a; // 也是C风格,但应该有static_cast?
const int x = 5;
int* ptr = (int*)&x; // 这是const_cast吗?
// 还有:如何将变量的地址作为整数获取?