问题标签 [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.

0 投票
6 回答
42761 浏览

c++ - dynamic_cast 的性能?

在阅读问题之前:
这个问题不是关于使用dynamic_cast. 它只是关于它的性能。

我最近开发了一个dynamic_cast经常使用的设计。
在与同事讨论时,几乎每个人都说dynamic_cast不应该使用它,因为它的性能很差(这些同事有不同的背景,在某些情况下彼此不认识。我在一家大公司工作)

我决定测试这种方法的性能,而不是仅仅相信它们。

使用了以下代码:

上面的代码使用boost::date_timeLinux 上的方法来获取可用值。
dynamic_cast一次执行了 3 次,测量它们的代码是相同的。

1 次执行的结果如下:
Cast1 持续时间:74 微秒
Cast2 持续时间:2 微秒
Cast3 持续时间:1 微秒

第一次施法总是花费 74-111 微秒,同一执行中的以下施法花费 1-3 微秒。

所以最后我的问题是:
真的dynamic_cast表现不好吗?
根据测试结果它不是。我的测试代码正确吗?
为什么这么多开发人员认为如果不是,它就很慢?

0 投票
6 回答
35952 浏览

c++ - 来自“void *”的dynamic_cast

据此void*没有 RTTI 信息,因此铸造 from是void*不合法的并且是有意义的。

如果我没记错的话,dynamic_castfromvoid*正在研究 gcc。

你能澄清一下这个问题吗?

0 投票
3 回答
3037 浏览

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 美元会出现在这里?

0 投票
3 回答
11578 浏览

c++ - 常见问题解答:为什么只有一个类至少有 1 个虚拟方法时 dynamic_cast 才有效?

这不能在 C++ 中编译:

0 投票
4 回答
32826 浏览

c++ - boost::shared_ptr 和动态转换

我在使用shared_ptr基类时遇到问题,在取消引用它时似乎无法调用派生类的方法。我相信代码会比我更冗长:

0 投票
4 回答
1343 浏览

c++ - 为什么我不能在多重继承期间动态转换“sideways”?

以下代码抛出 std::bad_cast

我记得曾经阅读过 dynamic_cast 如何权衡实现性能,因为“它遍历完整的继承格”以便正确评估。编译器在这里需要做的是先向上投射,然后再向下投射。

是否可以使上述工作或我需要添加 virtual Foo* Bar::as_foo()=0;

0 投票
4 回答
17943 浏览

c++ - C++ dynamic_cast - 多态要求和向下转换

在下面的代码中,obj在案例 1 中构造的同时,我们也构造了一个derived类对象,但是它的成员函数是无法访问的obj。因此,在向下转换时(即,在情况 2 中),使用obj作为源,我们已经在其中构建derived了。为什么obj需要是多态的?

如果我对上面的描述感到困惑,为什么obj在向上转换时不需要是多态的,但是在向下转换时它在使用时确实需要是多态的dynamic_cast

0 投票
1 回答
283 浏览

c++ - 如果没有单个虚函数,dynamic_cast 的行为是否与 static_cast 一样?

在没有任何虚函数的类层次结构中,将dynamic_cast表现为简单static_cast,因为它没有为 RTTI 存储任何信息,还是会出错?

0 投票
1 回答
1319 浏览

objective-c - 如何在目标c中进行dynamic_cast

我想在目标 c 上编写这段代码:

ball 是 ElementJeu 的子类... obj-c 中是否存在类似的东西?

谢谢

0 投票
3 回答
3463 浏览

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>