全局静态变量vs函数中的静态变量?

Luc*_*ima 7 c++

使用之间有什么不同:

static Foo foo;
// ...
foo.func();
Run Code Online (Sandbox Code Playgroud)

和:

Foo& GetFoo(void) 
{
    static Foo foo;
    return foo;
}

// ...

GetFoo().func();
Run Code Online (Sandbox Code Playgroud)

哪个更好?

Rob*_*obᵩ 10

主要区别在于施工时.在第一种情况下,它发生在main()开始之前的某个时间.在第二种情况下,它发生在第一次调用期间GetFoo().

在第一种情况下,可以foo在初始化之前(非法)使用代码.在第二种情况下,这是不可能的.