【发布时间】:2019-11-12 00:51:59
【问题描述】:
我正在阅读“使用 Qt 4 进行 C++ GUI 编程”,我在其中找到了以下语句
与标准 C++ 的 dynamic_cast() 不同,Qt 的 qobject_cast() 可以跨动态库边界正常工作。
类似的声明出现在官方 Qt 文档中
https://doc.qt.io/qt-5/qobject.html#qobject_cast
这是什么意思?我们究竟在哪里不能在 C++ 中使用 dynamic_cast ? 那么虚函数呢?将它们与动态链接库一起使用是否安全?
【问题讨论】:
-
@G.M.好吧,这个问题的唯一答案只是简单地说“基本上,RTTI 在模块边界上是不可靠的”,而我要求解释它到底是什么意思(我不是一个有经验的程序员)。
-
至少,如果您可以只使用 C ABI 制作一个微不足道的接口,您的代码将更加可移植和健壮。我通常会尽量避免跨库边界传递 C++ 对象和任何非 C 对象。例外情况也是如此。此外,微薄的接口减少了子系统之间的耦合。
标签: c++