自动对象是指临时变量,存放在栈区动态存储区,无显示初始化,其值随机,作用范围从定义开始到函数结束,生命期随着函数的调用创建并随着函数退出而消亡。
静态变量是指通过static修饰的变量,存放在静态区,生命期贯穿整个程序运行期间,如果无显示初始化,则默认值为0,静态变量可以分为一下几种情况:
- 局部静态变量,局部变量加上static修饰,作用域为局部作用域,即所在的函数或语句结束,则作用域也结束
- 全局静态变量,全局变量加上static修饰,作用域为所在的文件从定义开始到文件结束,全局变量增加static修饰并不改变该变量的存储区域及生命期,只是限制该变量的作用范围,从全局可用(一处定义,多出声明可用),变成只有所在文件可用,对前台文件隐藏变量,限制其他文件访问该变量,避免变量名冲突,静态函数也有同样效果。
- 静态成员对象,成员对象加上static修饰,表示类的全局变量,会被该类所有对象共享,包括派生对象,因此静态成员对象需要在类外部或者在静态成员函数里初始化,不能在构造函数做初始化。静态成员初始化不能放在头文件中,会出现重复定义问题;静态数据成员可以作为成员函数的默认参数值,成员函数不行;静态数据成员类型可以所属类的类型,普通数据类型如果要使用所属类的类型,只能是指针或者引用;静态数据成员可以作为const成员函数的合法修改,因为静态数据成员不是this指针下的成员。
- 静态函数成员,函数成员加上static修饰,表示未类多有对象共享,静态函数成员不带this指针,因此无法直接引用该类的普通数据对象,静态函数成员可以独立调用,无需通过类实例
网友评论