我正在审查 C++ casts 运算符,我有以下疑问:
对于多态类
- 二应该使用
polymorphic_cast
- 我永远不应该使用,
static_cast
因为向下转换可能会导致未定义的行为。无论如何,代码都会编译这种情况。
现在假设我有以下情况
class CBase{};
class CDerived : public CBase{};
int main( int argc, char** argv ){
CBase* p = new CDerived();
//.. do something
CDerived*pd = static_cast<CDerived*>( p );
}
由于不涉及多态性,我不会使用polymorphic_cast
,代码甚至不会编译。
如果在某个时候,有人virtual
在继承树中引入了一些功能,而我现在已经意识到了,那么我就处于危险之中:我该如何实现呢?
我应该polymorphic_cast
避免任何风险,但代码仍将在没有任何通知的情况下编译。
你如何意识到这种变化或防止这些情况发生?
谢谢AFG