Avatar ·

何时在C++中使用static_cast、dynamic_cast、const_cast和reinterpret_cast?

你好!我刚开始学习C++,对类型转换感到困惑。似乎有四个不同的操作符:static_cast、dynamic_cast、const_cast和reinterpret_cast。但什么时候用哪个,我完全搞不清楚。 例如,我想把double转换成int。可以直接像C语言那样写(int)value吗?为什么需要static_cast? 或者这种情况:我有一个类层次结构,想把基类指针转换成派生类指针。我听说要用dynamic_cast,但它只适用于有虚函数的情况。如果没有虚函数呢?可以用static_cast吗? 还有const_cast让我困惑。我知道它可以“移除”常量性。但这难道不危险吗?而且为什么要修改一个常量对象? 最可怕的是reinterpret_cast。我读到它可以把任何指针转换成其他任何指针,甚至转换成int。这合法吗?什么时候会用到它? 下面是我编译失败的代码示例: