__thread 保证是零初始化的吗?
Is __thread guaranteed to be zero initalized?
我有两个变量。一个是 __thread
,另一个是 static __thread
。如果我有一个构造函数,我要做的就是将所有成员变量置零。我也碰巧只在函数体之外使用这个 class 。我的变量是否会初始化为零而无需编写构造函数?
澄清一下。我有一个 class 定义为 __thread Foo foo
和 static __thread Foo foo
。我并不是说我有一个字面上名为 __thread 的变量,我以某种方式欺骗了编译器让我在不命名类型的情况下使用它。我肯定 static 是零初始化的,但是 IDK 如果 __thread 撤消它或者如果 __thread 没有 static 将被零初始化
线程局部变量在任何其他构造函数之前被零初始化。如果您没有构造函数,则只会进行零初始化。在 class 类型的情况下,这意味着所有成员都设置为零。
Zero initialization is performed in the following situations:
- 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
我有两个变量。一个是 __thread
,另一个是 static __thread
。如果我有一个构造函数,我要做的就是将所有成员变量置零。我也碰巧只在函数体之外使用这个 class 。我的变量是否会初始化为零而无需编写构造函数?
澄清一下。我有一个 class 定义为 __thread Foo foo
和 static __thread Foo foo
。我并不是说我有一个字面上名为 __thread 的变量,我以某种方式欺骗了编译器让我在不命名类型的情况下使用它。我肯定 static 是零初始化的,但是 IDK 如果 __thread 撤消它或者如果 __thread 没有 static 将被零初始化
线程局部变量在任何其他构造函数之前被零初始化。如果您没有构造函数,则只会进行零初始化。在 class 类型的情况下,这意味着所有成员都设置为零。
Zero initialization is performed in the following situations:
- 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