首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态加载是否严格符合C++标准?

动态加载是否严格符合C++标准?
EN

Stack Overflow用户
提问于 2014-09-21 09:18:38
回答 1查看 199关注 0票数 3

使用动态加载是否需要对代码进行严格合法的C++的特殊预防措施?

C++11标准引用某些事件的顺序,例如第一次调用main()之前发生的事情。然而,动态加载似乎是从程序中事件排序的典型假设中解脱出来的。

例如,引用了第3.6.2节。

静态初始化应在进行任何动态初始化之前执行。

在动态加载的情况下,这似乎是一个几乎不可能的义务,如果采取字面意思。程序可能会引发动态初始化,然后动态加载代码。如果该代码包含的变量通常是静态初始化的,则违反了C++标准。看来,“标准”规定的事件顺序似乎仍然可以被“如若不然”规则所满足和合法,但在其他地方,其他人则警告说,不要过于宽泛地解释该规则。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-21 20:57:35

C++标准没有任何关于动态模块的规定,因此需要进行一定的解释。

是的,在主模块中动态初始化变量之后,动态加载模块中的静态初始化变量将被初始化。您可以观察到这一点,并在对程序的行为产生影响的情况下构造程序。但是,如果您将DLL看作一个单独的程序,一个共享主程序内存空间但有自己的时间线的程序,您几乎可以在模块级别上应用相同的规则,并使用它们来预测应用程序范围内的行为。编译器不想让你吃惊..。只是有时候必须这样。

顺便说一句,当涉及到C++和DLL之间的冲突时,初始化顺序实际上是您最不关心的。动态模块破坏的规则要多得多,特别是在RTTI方面。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25957705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档