- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在阅读有关 dynamic_cast 的内容,然后我遇到了以下语句 ( from cplusplus.com ):
Compatibility note: This type of dynamic_cast requires Run-Time Type Information (RTTI) to keep track of dynamic types. Some compilers support this feature as an option which is disabled by default. This needs to be enabled for runtime type checking using dynamic_cast to work properly with these types.
例子之后:
// dynamic_cast
#include
#include
sử dụng không gian tên std;
class Base { virtual void dummy() {} };
class Derived: public Base { int a; };
int chính () {
thử {
Base * pba = new Derived;
Base * pbb = new Base;
Derived * pd;
pd = dynamic_cast(pba);
if (pd==0) cout << "Null pointer on first type-cast.\n";
pd = dynamic_cast(pbb);
if (pd==0) cout << "Null pointer on second type-cast.\n";
} catch (exception& e) {cout << "Exception: " << e.what();}
trả về 0;
}
作者所说的“这种类型的 dynamic_cast”是什么意思? dynamic_cast 不是只用于多态类吗(几乎)?他提到这个 RTTI 是动态转换工作所必需的,这是否意味着您必须谨慎使用 dynamic_cast 因为您不知道编译器是否完全支持它,因此它比其他转换风险更大哪些运营商不需要这个RTTI?
câu trả lời hay nhất
兼容性说明与前一段(和代码示例)相关:
But
dynamic_cast
can also downcast (convert from pointer-to-base to pointer-to-derived) polymorphic classes (those with virtual members) if -and only if- the pointed object is a valid complete object of the target type.
这是真的:向下转型需要一个多态类型的对象,并且 RTTI 在运行时遍历对象的继承树。
另一种类型的dynamic_cast
hiện hữucái đó之前的段落中有解释:
This naturally includes pointer upcast (converting from pointer-to-derived to pointer-to-base), in the same way as allowed as an implicit conversion.
这里不需要 RTTI,因为对象的基总是静态已知的。
所以你只需要完整地阅读周围的文字,就能理解你正在阅读的单词的上下文。
但是,我要指出,根据我的经验,默认情况下禁用 RTTI 的编译器基本上是闻所未闻的。我并不是说不存在 - 可能有一些针对嵌入式平台的特定行业的利基编译器这样做是为了在程序员的 Makefile 中节省几个字节。但据我所知,大多数人使用的编译器(GCC、Clang、Visual Studio、ICC、Comeau)都将 RTTI 作为标准打包并保持打开状态,直到您要求将其关闭。
关于c++ - Dynamic_cast 兼容性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44444847/
这不是我的专业领域,所以我希望问的是正确的问题。 我们有一台滚动租用的服务器。旧服务器是32位windows服务器,新服务器是64位windows 2008 R2 SP1。 其中一个 Web 应用程序
Như hiện tại, câu hỏi này không phù hợp với định dạng Hỏi & Đáp của chúng tôi. Chúng tôi mong đợi câu trả lời sẽ được hỗ trợ bởi các sự kiện, trích dẫn hoặc chuyên môn, nhưng câu hỏi có thể gây ra tranh luận, tranh luận, bỏ phiếu hoặc thảo luận mở rộng. Nếu bạn cảm thấy vấn đề này có thể được cải thiện và có thể mở lại, hãy truy cập
我已将 Oracle 数据库从 10g 迁移到 12c。从 12c 开始,oracle 不支持 PLSQL_V2_COMPATIBILITY 参数。 该参数用于: https://www.safari
开发环境db server为SqlServer 2005(开发版) 有什么方法可以确保我的 SQL 查询将在 SqlServer 2000 中运行? 此数据库设置为兼容级别“SQL Server 20
我有一个这种形式的类: public class Foo implements Serializable { private static final long serialVersionUI
我有以下代码来隐藏状态栏,取自 http://developer.android.com/training/system-ui/status.html和 Hide status bar android
我正在尝试测试 .prop() 是否方法存在于当前包含的 jQuery 中(出于兼容性原因): if(typeof $.prop === 'function') 我期望上面的条件是 true对于 jQ
当收到新消息时,我在项目中使用BroadcastChannel更改所有选项卡的标题。 问题在于它仅适用于chrome和firefox。因此,我决定使用localStorage创建一个Broadcast
我正在使用一个函数通过 FTP 将一个文件上传到我的服务器。这是我的代码并且工作正常但是创建的文件 example.json 不兼容 UTF8,因为它有 Atlético 而不是 Atlético 例
我正在使用兼容性类来构建用户代理字符串: public abstract class Compatibility { private static int sdkInt = 0; pr
我需要实现一个 C 例程来(解)压缩 gzip 格式的文件。 谁能举个例子? 我试过 zlib,但它似乎不兼容。 谢谢。 最佳答案 zlib 与 gzip 文件完全兼容,但您需要确保您使用的是面向 g
我正在使用以下 CSS 代码,它与 Chrome 完美兼容,但与 IE 浏览器不兼容 .collapse{ display:block; } .collapse + input[type="c
我的应用程序以 android Sdk 的 v10 为目标,但具有 minSdkVersion 的 v6。默认情况下,“match_parent”属性将用于宽度或高度。我应该为 fill_parent
我正在阅读有关 dynamic_cast 的内容,然后我遇到了以下语句 ( from cplusplus.com ): Compatibility note: This type of dynamic
我正在尝试在 Linux 下使用 QtCreator 构建一个用 VS 2008 编写的项目,但我遇到了很多错误: /home/ga/dev/CppGroup/MonteCarlo/main.cpp:
因此,我正在构建一个网站,用户可以在该网站上上传观看视频。我正在使用标准的 HTML5 视频播放器 ( ... )目前,我使用多个来源:MP4、OGG 和 WEBM,以实现跨浏览器兼容性 由于维护三
mozilla 和其他浏览器是否有类似-webkit-box-reflect 的属性?我无法在谷歌上找到哪些其他浏览器支持这个。因此,如果有人可以告诉我或给我链接,那就太好了。 最佳答案 这不仅可以使
我定义了一个自定义的 ValidateSet 参数属性,如下所示: Class MyValidValuesAttribute : System.Management.Automation.IValid
我使用 .net 4.0、linq 等编写 winforms 应用程序。它可以在带有 .net 2.0 的机器上运行吗? 最佳答案 不,不会。为 Framework 4.0 版编译的应用程序将要求该框
我如何专门检查 @keyframes translate3d 动画 与浏览器的兼容性? 请不要关闭这个问题,因为在问这个问题之前我已经尝试了很多 stackoverflow 解决方案。 我想检查我的网
Tôi là một lập trình viên xuất sắc, rất giỏi!