在多态对象上使用static_cast是否表明存在设计缺陷?
Does using a static_cast on a polymorphic object indicate a design flaw?
我知道应该避免dynamic_cast,但是假设我的程序中有一个Base类的对象x,我知道在执行的某一点上也是派生类(继承自Base)的对象x。是否可以使用static_cast向下转换以调用派生方法等?还是说这是设计缺陷?
这表明与使用dynamic_cast
完全相同的设计缺陷。事实是,如果您使用指向基类的指针,则应该意味着您只使用传递的对象,就好像它们是该基类一样。如果必须确定对象的动态派生类型,那么可能不应该使用指向base的指针。
使用static_cast
只比使用dynamic_cast
更危险一点。只有当您要转换的类型确实正确时,才具有定义良好的行为。对于dynamic_cast
,至少它会告诉您它是否不是。
Fruit
!"我不管它是Apple
还是Banana
——我们对它们都一视同仁!"如果你没有像对待基类型那样对待所有的对象,你可能需要重新思考。正如Mark Ransom在他的回答中所举的例子,有时候你确实想用这种方式表达沮丧。
具有合法用途。如果没有它,奇怪循环模板模式(CRTP)是不可能的。
在我看来,这可能表明存在设计缺陷。如果你知道它是某种类型的派生类,为什么要把它作为基类传递呢?
相关文章:
- C++模板来检查友元函数的存在
- 既然存在危险,为什么项目要使用-I include开关
- 我们可以访问一个不存在的联盟的成员吗
- C++:对不存在的命名空间使用命名空间指令
- C++quit()函数中可能存在作用域问题
- C++擦除(如果存在)
- g++ 说函数不存在,即使包含正确的标头
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 有了gcc,是否可以链接库,但前提是它存在
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 这个危险指针示例是否因为 ABA 问题而存在缺陷?
- clang实现char8_t的方式是否存在缺陷,或者标准的某个黑暗角落是否禁止优化?
- 可以归类为病毒的程序可能存在安全缺陷
- trie搜索中存在逻辑缺陷
- 回文测试仪存在逻辑缺陷
- mingw中存在奇怪的语法缺陷
- 指针上的interpret_cast在char和unsigned char之间存在缺陷
- 将模拟集中在[0.5,0.5,0.5]中,盒大小为1是否存在缺陷?
- 在多态对象上使用static_cast是否表明存在设计缺陷?
- 为什么没有<stlfwd>标题,不存在它是否可以被视为缺陷?