And*_*owl 17
编码器认为nextFoo仅在第一次运行中设置,而最后一行,他是对的吗?
是.static局部变量只初始化一次(而不是每次输入函数).在C++ 11中,这也保证以线程安全的方式发生.根据C++ 11标准的6.7/4段:
[...]如果控件在初始化变量时同时进入声明,则并发执行应等待初始化完成[...]
注意,如果static对象的初始化引发异常,则在下次function()输入时将重新尝试其初始化(在这种情况下不相关,因为初始化int不能抛出).从上面引用的同一段落:
[...]如果初始化通过抛出异常退出,则初始化未完成,因此下次控制进入声明时将再次尝试.[...]