__thread 保证是零初始化的吗?

Is __thread guaranteed to be zero initalized?

我有两个变量。一个是 __thread,另一个是 static __thread。如果我有一个构造函数,我要做的就是将所有成员变量置零。我也碰巧只在函数体之外使用这个 class 。我的变量是否会初始化为零而无需编写构造函数?


澄清一下。我有一个 class 定义为 __thread Foo foostatic __thread Foo foo。我并不是说我有一个字面上名为 __thread 的变量,我以某种方式欺骗了编译器让我在不命名类型的情况下使用它。我肯定 static 是零初始化的,但是 IDK 如果 __thread 撤消它或者如果 __thread 没有 static 将被零初始化

线程局部变量在任何其他构造函数之前被零初始化。如果您没有构造函数,则只会进行零初始化。在 class 类型的情况下,这意味着所有成员都设置为零。

Zero initialization is performed in the following situations:

  1. For every named variable with static or thread-local storage duration that is not subject to constant initialization, before any other initialization.

If T is an non-union class type, all base classes and non-static data members are zero-initialized, and all padding is initialized to zero bits. The constructors, if any, are ignored.

https://en.cppreference.com/w/cpp/language/zero_initialization