自动对象与静态对象及static

自动对象是指临时变量,存放在栈区动态存储区,无显示初始化,其值随机,作用范围从定义开始到函数结束,生命期随着函数的调用创建并随着函数退出而消亡。

静态变量是指通过static修饰的变量,存放在静态区,生命期贯穿整个程序运行期间,如果无显示初始化,则默认值为0,静态变量可以分为一下几种情况:

  1. 局部静态变量,局部变量加上static修饰,作用域为局部作用域,即所在的函数或语句结束,则作用域也结束
  2. 全局静态变量,全局变量加上static修饰,作用域为所在的文件从定义开始到文件结束,全局变量增加static修饰并不改变该变量的存储区域及生命期,只是限制该变量的作用范围,从全局可用(一处定义,多出声明可用),变成只有所在文件可用,对前台文件隐藏变量,限制其他文件访问该变量,避免变量名冲突,静态函数也有同样效果。
  3. 静态成员对象,成员对象加上static修饰,表示类的全局变量,会被该类所有对象共享,包括派生对象,因此静态成员对象需要在类外部或者在静态成员函数里初始化,不能在构造函数做初始化。静态成员初始化不能放在头文件中,会出现重复定义问题;静态数据成员可以作为成员函数的默认参数值,成员函数不行;静态数据成员类型可以所属类的类型,普通数据类型如果要使用所属类的类型,只能是指针或者引用;静态数据成员可以作为const成员函数的合法修改,因为静态数据成员不是this指针下的成员。
  4. 静态函数成员,函数成员加上static修饰,表示未类多有对象共享,静态函数成员不带this指针,因此无法直接引用该类的普通数据对象,静态函数成员可以独立调用,无需通过类实例
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,806评论 1 32
  • 1. 结构体和共同体的区别。 定义: 结构体struct:把不同类型的数据组合成一个整体,自定义类型。共同体uni...
    breakfy阅读 6,435评论 0 22
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,868评论 8 265
  • 最近经历了半个多月的低迷期间,感觉到无力悲伤,跟老公愤怒争吵过,自己也痛哭过,经过一次次的挣扎,感觉自己又慢慢站了...
    婷下脚步阅读 3,199评论 0 10
  • 我是一块石头,独一无二的一块石头。在一座山上,山不高,但风景很好。有许许多多的朋友,我们每天互相玩笑,嘻嘻打闹,也...
    桃至夭夭阅读 5,826评论 0 0