是的,我知道使用 dynamic_cast 进行向下转型如果 Base 不具备多态性将无法编译,但我的问题并不是关于这个。class Base { public: virtual void bar() { cout <<...
为什么我在运行以下代码时会收到以下错误提示? 1>C:\Libs\boost_1_44\boost/smart_ptr/shared_ptr.hpp(259): error C2683: 'dynamic_cast' : 'my_namespace::A' is not a polym...
如果这个问题已经有答案了,我提前道歉,因为我找不到答案。 注意:这是一项作业任务,如果你觉得不舒服回答,我完全理解。 我有以下内容: ptr.h: template<typename T> class Ptr { T* address; size_t* co...
我已经阅读了关于C++中动态类型转换的几个线程,所有这些都有人声称它表明了糟糕的设计。在其他语言中,当检查对象类型时,我从未认真考虑过它。我不会将其用作多态的替代方法,只有在强耦合看起来非常可接受的情况下才使用它。其中一个我经常遇到的情况是:有一个对象列表(我在C++中使用std::vecto...
5.2.7/7的大意是: 如果T为“指向cv void的指针”,则结果是指向x所指向的最派生类的指针。 这个语法有什么好的应用场景?什么情况下应该使用dynamic_cast<void*>呢?
下面的代码解释了这个问题。填写`same_sub_class`函数以检测指向虚基类A的两个指针是否实际上是同一个具体类。struct A { ... }: struct B : public A { ... }: struct C : public A { ... ...
在下面程序的最后两行中,static_cast<void*>和dynamic_cast<void *>的行为不同。据我所知,dynamic_cast<void*>的结果始终解析为完整对象的地址。因此它以某种方式使用了RTTI。请问有人能解释编译器如何使用RT...
这个问题与为什么我无法在多重继承中进行“侧向”dynamic_cast?非常相似,只是转换确实有效,但不能在构造函数内部执行。 标题: class A { public: virtual ~A() {} void ...
在C++中的dynamic_cast中,什么是side-cast/cross-cast?能否用例子解释一下? #include <iostream> using namespace std; class A { virtual void fn(){} }; class...
class A{ public: virtual ~A() {}; }; class B : public A{ }; int main(){ A&& p = B(); dynamic_cast<B&&>(std::m...