【发布时间】:2023-01-12 07:17:11
【问题描述】:
我知道自 C++11 以来,局部变量的 C++“魔术静态”模式 guarantees thread-safe initialization。无论本地如何初始化,这都适用吗?
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());
}
我有一个内部静态分析检查器抱怨上面显示的第三种样式的线程安全性,但我认为没关系,我正在寻找确认。谢谢。
【问题讨论】:
-
提供指向魔术静态的链接。而且我在您的代码中看不到如何调用任何东西。
-
任何这种表达方式都是“初始化”,只是初始化形式略有不同。而且由于保证初始化是线程安全的,因此它具有哪种形式并不重要。
-
@NeilButterworth 我链接到一篇关于魔术静力学的相关 SO 帖子。该术语未在链接的答案中明确使用,但在帖子的其他地方使用,并且在网络的其他地方也可以看到。不过,我不确定您所说的“如何调用任何东西”是什么意思。
-
函数局部静态对象初始化需要是线程安全的。不知道“魔术”部分是什么。
标签: c++ c++11 static thread-safety