C.h:
#include <iostream>
class C {
public:
explicit C(int id) { std::cout<<"Initialized "<<id<<"\n"; }
};
1.cpp:
#include "C.h"
C global(1);
2.cpp:
#include "C.h"
thread_local C thread(2);
int main() {}
我的问题是:是否保证
global
会在thread
之前被初始化?据我所知,C++标准在这一点上有些含糊。根据C++17 n4659草案,它说: [basic.start.static] 静态初始化 具有静态存储期的变量将作为程序启动的结果而被初始化。 具有线程存储期的变量将作为线程执行的结果而被初始化。
理所当然地,“程序启动”发生在“线程执行”之前,但由于这两个表达式只出现在标准的那个位置,因此我正在寻求实际语言专家的建议。