gpt4 book ai didi

C++ 动态初始化 - 跨翻译单元

转载 作者:行者123 更新时间:2023-11-30 04:07:37 26 4
gpt4 key购买 nike

C++98 语言标准规定:(我的重点)


3.6.2 非本地对象的初始化

1 英镑[...]零初始化和常量表达式的初始化统称为称为静态初始化;所有其他初始化都是动态初始化。[...]

3 英镑[...]它是实现定义的命名空间范围对象的动态初始化(8.5、9.4、12.1、12.6.1)是否在 main 的第一条语句之前完成。如果初始化延迟到 main 的第一条语句之后的某个时间点,它应该发生在第一次使用与要初始化的对象相同的翻译单元中定义的任何函数或对象之前。[...]


在我的办公室,我们对黑体字段落有两种解释......

我的问题是:有一个类有一大堆静态方法和动态初始化的静态数据成员。在动态初始化完成之前,此类中的静态方法是否会(或不能)发生从另一个翻译单元调用

谢谢!

[编辑:]

也许这可以归结为“it shall occur”的读法:

  1. 应该已经开始了
  2. 应该已经完成​​

最佳答案

Can it (or can't it) happen that static methods in this class are called from another translation unit, before dynamic initialization has been completed?

加粗的段落很清楚,不是吗?此类数据的初始化保证在首次使用 任何 翻译单元中定义的函数或类之前发生。在何处调用函数并不重要。来自。保证是初始化发生在第一次使用翻译单元中的任何函数之前。当然,它们可能来自 另一个翻译单位,但这没有任何区别。在输入定义在this 翻译单元中的函数之前,必须执行初始化。

换句话说,你是安全的。

...

假设单线程执行,即。 C++98 在多线程环境中不提供任何保证,因此对于线程应用程序,上述保证通常仅意味着初始化将由第一个线程执行,以使用来自该翻译单元的函数或类。然后在执行此初始化时 出现竞争条件,其他线程可能会访问部分初始化的数据。

关于C++ 动态初始化 - 跨翻译单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22411081/

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