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...

102得票13回答
Java:如何将变量从一种类型动态转换为另一种类型?

我希望能够对Java变量进行动态类型转换,而类型信息存储在另一个变量中。 以下是常规的类型转换方法: String a = (String) 5; 这就是我想要的: String theType = 'String'; String a = (theType) 5; 这是否有可能实现,如果...

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

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

77得票3回答
可以安全地将NULL/零传递给dynamic_cast吗?

出于检查空指针的习惯,我有时会写:MyClass * c = someBasePtr ? dynamic_cast<MyClass*>(someBasePtr) : 0; if (c) {... 在进行dynamic_cast之前检查空指针,并且还要检查返回值。 然后我阅读了MS...

62得票4回答
使用dynamic_cast时,引用和指针的行为差异

我正在检查dynamic_cast的行为,并发现当它失败时,只有当目标类型是引用类型时才会抛出std::bad_cast异常。如果目标类型是指针类型,则从转换中不会抛出任何异常。这是我的示例代码:class A { public: virtual ~A() ...

55得票3回答
shared_ptr 跨 dynamic_cast 是否可行?

我有两个类 A 和 B,B 继承自 A。 如果我有一个 shared_ptr<A> 对象,我知道它实际上是 B 子类型,我该如何执行动态转换以访问 B 的 API(考虑到我的对象是 shared_ptr,而不仅仅是 A)?

52得票6回答
dynamic_cast的性能表现?

在阅读问题之前: 这个问题不涉及使用dynamic_cast的有用性,只是关于它的性能。 我最近开发了一个设计,在其中大量使用了dynamic_cast。 在与同事讨论时,几乎每个人都说不应该使用dynamic_cast,因为它会影响性能(这些同事有不同的背景,在某些情况下甚至不认识对方。我...

49得票3回答
动态转型(dynamic_cast)是如何实现的?

考虑这个简单的层次结构:class Base { public: virtual ~Base() { } }; class Derived : public Base { }; 试图将 Base* p 向下转换为 Derived* 可以使用 dynamic_cast<Derived*&g...

47得票4回答
如何使用unique_ptr执行dynamic_cast?

我有一个类层次结构如下:class BaseSession : public boost::enable_shared_from_this<BaseSession> class DerivedSessionA : public BaseSession class DerivedSe...

47得票6回答
从 "void *" 进行 dynamic_cast

根据这个问题,void*没有RTTI信息,因此从void*强制转换是不合法的且不合理的。 如果我没记错的话,在gcc上从void*进行dynamic_cast是可以的。 请你澄清这个问题。