20得票5回答
dynamic_cast的适当用例是什么?

我听说过很多次(并在实践中也看到了),使用dynamic_cast通常意味着不良设计,因为它可以并且应该被虚函数替代。 例如,请考虑以下代码:class Base{...}; class Derived:public Base{...}; ... Base* createSomeObject...

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

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

180得票10回答
C++中的dynamic_cast和static_cast

我对C++中的dynamic_cast关键字感到很困惑。struct A { virtual void f() { } }; struct B : public A { }; struct C { }; void f () { A a; B b; A* ap...

20得票1回答
动态类型转换(dynamic_cast)是如何失败的?

根据我所读的,执行错误的run-time dynamic_cast可能会抛出bad_cast异常或返回零。如果你正在进行指针转换,那么说它将返回零是正确的吗?例如:class Base { virtual void a(){} }; class Derived: public Base {};...

12得票6回答
在C++中检查两个基类的实例是否实际上属于同一个子类

下面的代码解释了这个问题。填写`same_sub_class`函数以检测指向虚基类A的两个指针是否实际上是同一个具体类。struct A { ... }: struct B : public A { ... }: struct C : public A { ... ...

13得票4回答
为什么虚函数调用比dynamic_cast更快?

我写了一个简单的例子,使用基类接口和 dynamic_cast 进行虚函数调用平均时间的估计,同时也调用了非虚函数。以下是代码:#include <iostream> #include <numeric> #include <list> #include &...

11得票2回答
当使用指针时,dynamic_cast 会在什么情况下抛出异常?

我在我的代码中使用 dynamic_cast 来将指针转换为以下的某个类型:Base *base = here storing the pointer; Derived *derived = dynamic_cast<Derived*>(base); 如果基类没有类层次结构的指针...

8得票3回答
析构函数中的动态类型转换

这段代码是否合法? class Base1 { }; class Base2 { public: virtual ~Base2() { if (!dynamic_cast<Base1*>(this)) std::cout <...

13得票5回答
C++中dynamic_cast的实际应用举例

有没有人能给我一个现实世界中需要使用dynamic_cast并且不能完全通过双重分派来解决的案例?我能想到的例子通常都可以通过双重分派来解决。 如果限制太强了,一个通常需要使用dynamic_cast的示例也会很好。 我想看到真正的例子,而不是“它通常用于类型树上下转换的强制类型转换”。

77得票7回答
动态转换到void指针有实际用途吗?

在C++中,T q = dynamic_cast<T>(p)这种写法对指针p进行运行时转换,将其转换为指向另一个指针类型T,而T必须位于*p的动态类型的继承层次结构中才能成功。这样做通常都是可以的。 然而,还可以执行dynamic_cast<void*>(p),它将简...