这个问题在这里已有答案:
我知道这是一个经常被问到的问题,但由于有很多变种,我想重新陈述它,并希望有一个反映当前状态的答案 . 就像是
Logger& g_logger() {
static Logger lg;
return lg;
}
变量lg的构造函数是否保证只运行一次?
我从以前的答案中知道,在C 03中,这不是;在C 0x草案中,这是强制执行的 . 但我想要一个更明确的答案
-
在C 11标准(非草案)中,线程安全的初始化行为是否已完成?
-
如果以上是肯定的,那么在当前最新版本的热门编译器中,即gcc 4.7,vc 2011和clang 3.0,它们是否正确实施?
2 回答
有关第6.7节:
然后有一个脚注:
所以,是的,你很安全 .
(这当然没有说明通过引用随后访问变量 . )
--fno-threadsafe-statics也值得一提 . 在gcc中:
另外,看看旧线程Are function static variables thread-safe in GCC?