c++ - 什么时候在 C++ 中调用静态初始化
问题描述
我有一个包含三个源文件的 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()
关键的 init 步骤。这个SO问题原来是正确的。
解决方案
什么时候在 C++ 中调用静态初始化
我想您的意思是,何时初始化具有静态存储持续时间的变量。如果变量具有静态初始化,那会发生在其他任何事情之前。
如果变量具有动态初始化,则在静态初始化期间初始初始化为零。动态初始化的确切点是实现定义的。该变量将在第一次访问之前的某个时间点进行初始化 - 或该翻译单元 (TU) 中的任何其他变量 - 或在调用该 TU 中的任何函数之前。
是否仅在调用 private_func 函数时才初始化?
private_func
无论是否被调用,它都可以被初始化。但是如果private_func
被调用,那么变量将在函数调用之前的某个时间点被初始化。我不清楚初始化是否可以推迟到永远不会发生。
此SO 帖子中的相关标准报价。
推荐阅读
- node.js - 每次打开新外壳(NVM)时节点版本都会重置
- mongodb - 由于接收器类型不匹配,以下候选均不适用:在反应弹簧中
- html - 使用 JQuery 将初始时间字符串设置为输入元素
- python-3.x - 将数据框列转换为英文文本
- powerbi - 如何根据条件进行非重复计数
- python - 我使用opencv python形式将模拟时钟转换为小时和分钟的数字数据,但我也需要它显示几秒钟
- cmake - nvcc 致命:未知选项“--threads”
- mysql - MYSQL 语句从前一天和之后的特定时间获取数据
- python - 删除 twitter 数据集的提及和特殊字符
- reactjs - 如何使用打字稿有条件地将useQuery放入react-query中