Thinking In C++ 学习笔记(2)名字控制
1. 函数内部的静态变量
函数内部的static变量存储在静态数据区而不是栈中,只在第一次调用函数时初始化一次。
编译器会为没有初值的内部类型的静态变量赋值为零(转化为适当的类型)。
2. 函数内部的静态对象
程序第一次执行到静态对象的定义点时(且仅一次)会调用对象的构造函数。
3. 静态对象的析构函数
静态对象的析构函数在程序从main()退出或调用exit()时被调用。在静态对象的析构函数内部调用exit() 将会造成无穷递归,调用abort()不会。
静态对象的销毁与初始化顺序相反。
C++中的静态成员
类的静态成员存储在一块单独的静态存储区,不管创建了多少该类的对象。
1. 定义静态数据成员的存储
静态数据成员的定义必须出现在类的外部(不允许内联)而且只能定义一次,因此它通常放在类的实现文件中。
//*.h
Class Values{
Static int size ;
};
//*.cpp
Int values::size = 10;
2. 静态数组的初始化
Class Values{
Static const int size = 10;
Static const int mem[];
};
Int Values::mem[] = { 10, 30, 67, 78};
Int man(){……}//end
内部类型的静态常量可以在类内部进行定义,但是对于其它静态对象或任意类型静态数组必须在类外部定义。
类内部的静态常量对象和对象的静态常量数组初始化必须在类的外部。
(const成员数据是在构造函数初始化列表中初始化的。)
3. 静态成员函数
静态成员函数只能访问静态数据成员。它既不能访问非静态数据成员也不能访问非静态函数成员。