gpt4 book ai didi

c++ - C++中什么时候调用static init

转载 作者:行者123 更新时间:2023-12-02 03:28:23 25 4
gpt4 key购买 nike

我有一个包含三个源文件的 C++ 程序:

// main.cpp

auto return_value = managed_call(int value);


// managed.cpp

#include "private_impl.hpp"
int managed_call(int arg) {
if (arg == 0)
return private_func();
else
return arg;
}



//private_impl.cpp

static some_type some_var = construct_static_object_might_blow();

int private_func() {
....
return 42;
}

我的问题是关于private_impl.cpp中静态对象的初始化:“什么时候发生?”或者更具体地说 - 它是否在调用 private_func 函数时才被初始化?

更新

我实际上把这个例子简化得有点太多了;有问题的代码将作为 Python 扩展运行 - 即它是 dlopen() ,这是关键的初始化步骤。 This SO question事实证明是正确的。

最佳答案

When is the static init called in C++

我想你的意思是,具有静态存储持续时间的变量何时初始化。如果变量具有静态初始化,那么这会在其他任何事情之前发生。

如果变量具有动态初始化,则在静态初始化期间它最初为零初始化。动态初始化的确切点是实现定义的。该变量将在第一次访问该变量或该翻译单元 (TU) 中的任何其他变量之前或调用该 TU 中的任何函数之前的某个时刻进行初始化。

is it only initialized if the private_func function is called?

无论private_func是否被调用,它都可能被初始化。但如果private_func被调用,那么该变量将在函数调用之前的某个时刻被初始化。我不清楚初始化是否可以推迟到永远不会发生。

相关标准引用在此SO post .

关于c++ - C++中什么时候调用static init,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59056311/

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