10得票3回答
dynamic_cast 混淆

我放弃了... $5.2.7/2- "如果T是一个指针类型,v应该是一个指向完整类类型的rvalue指针,并且结果是类型为T的rvalue。如果T是引用类型,则v应该是完整类类型的lvalue,结果是T所引用的类型的lvalue。" 根据上述规定,以下代码应该是良好的形式。 stru...

10得票2回答
dynamic_cast<>的速度有多快?

相较于一个典型的std::string::operator==(),这个代码的复杂度大约是多少?以下是更多细节,但不确定它们是否相关。回答复杂度或者近似度就可以了,谢谢! 细节:我将在一个列表的for循环中使用它来查找一些特定实例。我估计我的平均继承层数为3.5个类。我正在寻找的那个类有一个...

10得票4回答
C++中复杂的dynamic_cast

我有以下C ++案例: 抽象基类Abstract1和Abstract2。它们没有关联。 一个类Foo从Abstract1和Abstract2派生 我在一个编译单元中,没有关于类Foo的任何信息(没有声明,没有定义)。只有Abstract1和Abstract2是已知的。 (实际上,Foo...

10得票2回答
如何使用智能指针进行动态向上转型和向下转型?

我有一些带有通用接口的代码,需要进行向上和向下转换。现在我正在尝试转换为智能指针,但遇到了一些错误。以下代码重现了问题。我正在使用C++14,所以我认为这些东西现在应该可以自动工作? #include &lt;memory&gt; #include &lt;iostream&gt; int ...

9得票2回答
当编译器没有看到可能满足转换的类型时,编译器是否允许优化掉对易失指针的dynamic_cast?

看看这个小片段: struct A { virtual ~A() { } }; struct B { }; bool fn() { A *volatile a = new A; return dynamic_cast&lt;B *&gt;(a); } 编译器...

9得票5回答
动态转型在生产代码中是否安全删除?

动态转换(dynamic_cast)虽然速度较慢,但在处理对象层次结构时比静态转换(static_cast)更安全。我的问题是,如果我已经在调试代码中确保了所有(动态)转换的正确性,那么我是否有理由将它们改为静态转换(static_cast)? 我计划使用以下结构进行转换。(顺便问一下,你...

9得票1回答
如何使用dynamic cast检测指针的删除

如这里所示,可以使用dynamic_cast检测已删除的指针: #include &lt;iostream&gt; using namespace std; class A { public: A() {} virtual ~A() {} }; class B : publ...

8得票3回答
检查跨类型转换是否可能有效?

我知道使用dynamic_cast进行类层次结构的"交叉转换"是合法的。例如,如果我的类看起来像这样: A B \ / C 如果我有一个指向类型为C的对象的A*指针,那么我可以使用: A* aPtr = /* ... something that produces...

8得票2回答
C++中dynamic_cast中的side-cast或cross-cast是什么?

在C++中的dynamic_cast中,什么是side-cast/cross-cast?能否用例子解释一下? #include &lt;iostream&gt; using namespace std; class A { virtual void fn(){} }; class...

8得票1回答
非多态类型上的dynamic_cast

我能理解为什么在这种情况下 dynamic_cast 起作用: #include &lt;iostream&gt; struct A{ virtual ~A() = default; }; struct B { virtual ~B() = default; }; st...