Avatar ·

何时在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吗? // 还有:如何将变量的地址作为整数获取?