问题标签 [dynamic-cast]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - dynamic_cast 的性能?
在阅读问题之前:
这个问题不是关于使用dynamic_cast
. 它只是关于它的性能。
我最近开发了一个dynamic_cast
经常使用的设计。
在与同事讨论时,几乎每个人都说dynamic_cast
不应该使用它,因为它的性能很差(这些同事有不同的背景,在某些情况下彼此不认识。我在一家大公司工作)
我决定测试这种方法的性能,而不是仅仅相信它们。
使用了以下代码:
上面的代码使用boost::date_time
Linux 上的方法来获取可用值。
我dynamic_cast
一次执行了 3 次,测量它们的代码是相同的。
1 次执行的结果如下:
Cast1 持续时间:74 微秒
Cast2 持续时间:2 微秒
Cast3 持续时间:1 微秒
第一次施法总是花费 74-111 微秒,同一执行中的以下施法花费 1-3 微秒。
所以最后我的问题是:
真的dynamic_cast
表现不好吗?
根据测试结果它不是。我的测试代码正确吗?
为什么这么多开发人员认为如果不是,它就很慢?
c++ - dynamic_cast 混淆
我放弃这个...
$5.2.7/2-“如果 T 是指针类型,v 应该是指向完整类类型的指针的右值,结果是 T 类型的右值。如果 T 是引用类型,v 应该是一个完整的类类型,结果是 T 所指类型的左值。”
按照上面的说法,下面的代码应该是良构的。
但事实并非如此。所有编译器都抱怨 dynamic_cast 的操作数不是多态的
$5.2.7/6- 否则, v 应为指向多态类型 (10.3) 的指针或左值。
所以我的问题是 $5.2.7/2 是什么意思?为什么 5.2.7/6 美元会出现在这里?
c++ - 常见问题解答:为什么只有一个类至少有 1 个虚拟方法时 dynamic_cast 才有效?
这不能在 C++ 中编译:
c++ - boost::shared_ptr 和动态转换
我在使用shared_ptr
基类时遇到问题,在取消引用它时似乎无法调用派生类的方法。我相信代码会比我更冗长:
c++ - 为什么我不能在多重继承期间动态转换“sideways”?
以下代码抛出 std::bad_cast
我记得曾经阅读过 dynamic_cast 如何权衡实现性能,因为“它遍历完整的继承格”以便正确评估。编译器在这里需要做的是先向上投射,然后再向下投射。
是否可以使上述工作或我需要添加
virtual Foo* Bar::as_foo()=0;
?
c++ - C++ dynamic_cast - 多态要求和向下转换
在下面的代码中,obj
在案例 1 中构造的同时,我们也构造了一个derived
类对象,但是它的成员函数是无法访问的obj
。因此,在向下转换时(即,在情况 2 中),使用obj
作为源,我们已经在其中构建derived
了。为什么obj
需要是多态的?
如果我对上面的描述感到困惑,为什么obj
在向上转换时不需要是多态的,但是在向下转换时它在使用时确实需要是多态的dynamic_cast
?
c++ - 如果没有单个虚函数,dynamic_cast 的行为是否与 static_cast 一样?
在没有任何虚函数的类层次结构中,将dynamic_cast
表现为简单static_cast
,因为它没有为 RTTI 存储任何信息,还是会出错?
objective-c - 如何在目标c中进行dynamic_cast
我想在目标 c 上编写这段代码:
ball 是 ElementJeu 的子类... obj-c 中是否存在类似的东西?
谢谢
boost - C++ boost::shared_ptr & boost::weak_ptr & dynamic_cast
我有这样的事情:
现在我想更改我的应用程序以使用 boost shared_ptr 和 weak_ptr 以便我可以在一个地方删除我的食物实例。它看起来像这样:
但问题是 dynamic_cast 似乎不适用于 weak_ptr
如果我知道它指向的对象是派生类型,我该如何weak_ptr<Fruit>
摆脱它?weak_ptr<Food>