gpt4 book ai didi

c++ - 为什么 thread_local 变量从未在这里初始化?

转载 作者:行者123 更新时间:2023-12-02 09:55:56 26 4
gpt4 key购买 nike

我正在努力解决 C++ Crash Course我遇到了以下代码 list :

#include <cstdio>

struct Tracer {
Tracer(const char* name)
: name{ name } {
printf("%s constructed.\n", name);
}
~Tracer() {
printf("%s destructed.\n", name);
}

private:
const char* const name;
};

static Tracer t1{ "Static variable" };
thread_local Tracer t2{ "Thread-local variable" };

int main() {
printf("A\n");
Tracer t3{ "Automatic variable" };
printf("B\n");
const auto* t4 = new Tracer{ "Dynamic variable" };
printf("C\n");
}

这本书的作者声称我应该看到:
Static variable constructed.
Thread-local variable constructed.
A
Automatic variable constructed.
B
Dynamic variable constructed.
C
Automatic variable destructed.
Thread-local variable destructed.
Static variable destructed.

这对我来说很有意义。但是,当我在我的机器(MacOS、CLion、g++)上运行它时,我看到以下内容:
Static variable constructed.
A
Automatic variable constructed.
B
Dynamic variable constructed.
C
Automatic variable destructed.
Static variable destructed.

为什么行为不同以及 t2 会发生什么情况多变的?

最佳答案

A thread_local变量可以在线程启动时初始化,但也可以仅在使用时初始化(标准要求在第一次使用之前初始化)。保证也是,如果初始化,它将在线程终止时被销毁。

关于c++ - 为什么 thread_local 变量从未在这里初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60141479/

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