静态变量生命周期,文件范围与函数范围

Static variable lifetimes, file-scope vs. function scope

假设我有一个 .cpp 文件:

static Foo aFoo;

Foo& staticFoo(){
    return aFoo; 
}

Foo& singletonFoo(){ // not thread safe in c++-03
    static Foo staticFoo;
    return staticFoo;
}

和公开这些功能的 .h 文件(但不直接 aFoo)。

  1. 我确定 aFoostaticFoo 之前初始化了吗?
  2. 我确定 staticFooaFoo 之后被销毁了吗?
  3. 我确定 aFoo 在任何自动存储期限后被销毁 我程序中的变量?
  1. 没有。如果有人在静态初始化期间从另一个翻译单元调用 singletonFoo 那么它是未指定的。
  2. 否,因为破坏的顺序与构建的顺序相反,我们已经确定不能保证构建。
  3. aFoo会在所有local/automatic个变量后被销毁。