Cin*_*out 2 c++ casting static-cast
我用的时候static_cast:
const C* cObj; // C is a user-defined class
void* obj = static_cast<void*>(cObj);
Run Code Online (Sandbox Code Playgroud)
我收到错误:
转换失去限定符
但是当我使用C风格的演员表时,它可以工作:
const C* cObj;
void* obj = (void*)cObj;
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
通过C++样式转换来实现它的正确方法是什么?
为什么会这样?
C风格的演员阵容因为具有多个C++演员阵容的强大功能.例如,它可以抛弃常量并同时重新解释指针类型.此处描述了C++编译器用于决定如何解释特定C类型转换的过程.
一个C++转换常量指针的方法是将它转换为另一个常量指针,如下所示:
const void* obj = static_cast<const void*>(cObj);
Run Code Online (Sandbox Code Playgroud)
如果你还需要抛弃const-ness,你可以像这样链式转换:
void* obj = const_cast<void*>(static_cast<const void*>(cObj));
Run Code Online (Sandbox Code Playgroud)
const_cast像往常一样应用的常规注意事项:如果您正在转换的指针指向常量对象,则在转换后通过非const指针修改该对象会导致未定义的行为.