我对C++中的dynamic_cast关键字感到很困惑。struct A { virtual void f() { } }; struct B : public A { }; struct C { }; void f () { A a; B b; A* ap...
我希望能够对Java变量进行动态类型转换,而类型信息存储在另一个变量中。 以下是常规的类型转换方法: String a = (String) 5; 这就是我想要的: String theType = 'String'; String a = (theType) 5; 这是否有可能实现,如果...
在C++中,T q = dynamic_cast<T>(p)这种写法对指针p进行运行时转换,将其转换为指向另一个指针类型T,而T必须位于*p的动态类型的继承层次结构中才能成功。这样做通常都是可以的。 然而,还可以执行dynamic_cast<void*>(p),它将简...
出于检查空指针的习惯,我有时会写:MyClass * c = someBasePtr ? dynamic_cast<MyClass*>(someBasePtr) : 0; if (c) {... 在进行dynamic_cast之前检查空指针,并且还要检查返回值。 然后我阅读了MS...
我正在检查dynamic_cast的行为,并发现当它失败时,只有当目标类型是引用类型时才会抛出std::bad_cast异常。如果目标类型是指针类型,则从转换中不会抛出任何异常。这是我的示例代码:class A { public: virtual ~A() ...
我有两个类 A 和 B,B 继承自 A。 如果我有一个 shared_ptr<A> 对象,我知道它实际上是 B 子类型,我该如何执行动态转换以访问 B 的 API(考虑到我的对象是 shared_ptr,而不仅仅是 A)?
在阅读问题之前: 这个问题不涉及使用dynamic_cast的有用性,只是关于它的性能。 我最近开发了一个设计,在其中大量使用了dynamic_cast。 在与同事讨论时,几乎每个人都说不应该使用dynamic_cast,因为它会影响性能(这些同事有不同的背景,在某些情况下甚至不认识对方。我...
考虑这个简单的层次结构:class Base { public: virtual ~Base() { } }; class Derived : public Base { }; 试图将 Base* p 向下转换为 Derived* 可以使用 dynamic_cast<Derived*&g...
我有一个类层次结构如下:class BaseSession : public boost::enable_shared_from_this<BaseSession> class DerivedSessionA : public BaseSession class DerivedSe...
根据这个问题,void*没有RTTI信息,因此从void*强制转换是不合法的且不合理的。 如果我没记错的话,在gcc上从void*进行dynamic_cast是可以的。 请你澄清这个问题。