gpt4 book ai didi

C++ 静态全局非 POD : theory and practice

转载 作者:可可西里 更新时间:2023-11-01 16:29:29 25 4
gpt4 key购买 nike

我在阅读 Qt 编码约定文档时发现了以下段落:

Anything that has a constructor or needs to run code to be initialized cannot be used as global object in library code, since it is undefined when that constructor/code will be run (on first usage, on library load, before main() or not at all). Even if the execution time of the initializer is defined for shared libraries, you’ll get into trouble when moving that code in a plugin or if the library is compiled statically.

我知道 theory 是什么说,但我不明白“一点也不”的部分。有时我使用非 POD 全局常量静态变量(例如:QString),但我从来没有想过它们可能没有被初始化……这是特定于共享对象/DLL 的吗?这是否只发生在损坏的编译器上?

您如何看待这条规则?

最佳答案

“一点也不”部分只是说 C++ 标准对这个问题保持沉默。它不知道共享库,因此也没有说明某些 C++ 功能与这些库的交互。

在实践中,我已经看到在 GUI 和命令行程序中,作为插件和独立应用程序在 Windows、OSX 和许多版本的 Linux 和其他 Unices 上使用全局非 POD 静态全局变量。至少有一个项目(使用非 POD 静态全局变量)具有这些所有组合的全套版本。我见过的唯一问题是,一些非常旧的 GCC 版本生成的代码会在可执行文件停止时调用动态库中此类对象的 dtor,而不是在卸载库时。当然,那是致命的(当库已经不存在时调用库代码),但那已经是将近十年前的事了。

当然,这仍然不能保证任何事情。

关于C++ 静态全局非 POD : theory and practice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1538137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com