C++的“magic static”模式对所有初始化样式都有效吗?

qxsslcnc  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(173)

我知道C的“magic static”模式保证了自C11以来局部变量的线程安全初始化。不管局部变量是如何初始化的,这都是正确的吗?

int some_expensive_func();

void test()
{
  static int attempt1{some_expensive_func()};
  static int attempt2 = {some_expensive_func()};
  static int attempt3 = some_expensive_func();
  static int attempt4(some_expensive_func());
}

我有一个内部的静态分析检查员抱怨上面显示的第三种风格的线程安全性,但我认为它是可以的,我正在寻找确认。谢谢。

t1rydlwq

t1rydlwq1#

是的,所有的初始化样式对于局部静态变量都是线程安全的(从C++11开始)。唯一不是线程安全的是一些实际上不是初始化的东西,* 例如 *,类似这样的东西:

static int x;               // zero-initialized on program startup
x = some_expensive_func();  // this is assignment, not initialization

相关问题