函数中的静态int

Dal*_*ale 6 c++ static function

我遇到了这段代码:

void function(int nextFoo)
{
    static int lastFoo = nextFoo; 
    if (nextFoo != lastFoo) 
    {
         // is this possible?
    }
    lastFoo = nextFoo;
}
Run Code Online (Sandbox Code Playgroud)

编码器认为lastFoo只在第一次运行中设置,最后一行,他是对的吗?我认为(但不知道)if块中的代码永远不会运行,但无法找到验证.

And*_*owl 17

编码器认为nextFoo仅在第一次运行中设置,而最后一行,他是对的吗?

是.static局部变量只初始化一次(而不是每次输入函数).在C++ 11中,这也保证以线程安全的方式发生.根据C++ 11标准的6.7/4段:

[...]如果控件在初始化变量时同时进入声明,则并发执行应等待初始化完成[...]

注意,如果static对象的初始化引发异常,则在下次function()输入时将重新尝试其初始化(在这种情况下不相关,因为初始化int不能抛出).从上面引用的同一段落:

[...]如果初始化通过抛出异常退出,则初始化未完成,因此下次控制进入声明时将再次尝试.[...]