C++中的static对象是指存储区不属于stack和heap、"寿命"从被构造出来直至程序结束为止的对象。这些对象包括全局对象,定义于namespace作用域的对象,在class、function以及file作用域中被声明为static的对象。其中,函数内的static对象称为local static 对象,而其它static对象称为non-local static对象。
这两者在何时被初始化(构造)这个问题上存在细微的差别:
对于local static对象,在其所属的函数被调用之前,该对象并不存在,即只有在第一次调用对应函数时,local static对象才被构造出来。
而对于non-local static对象,在main()函数开始前就已经被构造出来,并在main()函数结束后被析构。
可以通过以下的试验代码来分辨这细微的差别
这两者在何时被初始化(构造)这个问题上存在细微的差别:
对于local static对象,在其所属的函数被调用之前,该对象并不存在,即只有在第一次调用对应函数时,local static对象才被构造出来。
而对于non-local static对象,在main()函数开始前就已经被构造出来,并在main()函数结束后被析构。
可以通过以下的试验代码来分辨这细微的差别
#include
<
iostream
>
using namespace std;
class InnerClassA
{
public:
InnerClassA(){cout<<"in ctor of InnerClassA"<<endl;}
using namespace std;
class InnerClassA
{
public:
InnerClassA(){cout<<"in ctor of InnerClassA"<<endl;}