静态对象是指具有静态存储期限的对象,即从定义式开始,分配的内存空间一直保留到程序结束的对象,包括全局变量、定义于命名空间的对象以及使用static
修饰符声明的对象。静态对象分为两类,具有程序块作用域的static
对象称为局部静态对象,其余的成为非局部静态对象。
对于在同一个编译单元(产生单一目标文件的源码,由单一源文件和其包含的头文件构成)定义的非静态局部对象,它们的初始化顺序是由其定义顺序决定的,而对于在不同编译单元定义的非静态局部变化,它们的初始化顺序却是未定义的,因此是不确定的。
//-*-C++-*-
/********************************************
* FileSystem.h *
* *
* C++静态非局部变量初始化顺序,案例参考 *
* Effective C++ *
********************************************/
#include <cstddef>
class FileSystem
{
private:
int diskNums;
public:
FileSystem()
{
diskNums = 4;
}
public:
std::size_t numDisks() const;
};
extern FileSystem tfs;
/***********************************