孤独的猫

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

一,面向过程的static

  函数中的静态变量 :当变量声明为static时,空间将在程序的生命周期内分配,其被存放在在全局数据区。即使多次调用该函数,静态变量的空间也只分配一次,前一次调用中的变量值通过下一次函数调用传递。这对于在C / C ++或需要存储先前函数状态的任何其他应用程序非常有用。

 

 

例如 : 

 1 #include <iostream>
 2 using namespace std;
 3 
 4 void func() {
 5     static int i = 0;
 6     cout << "i = " << ++i << endl;
 7 }
 8 
 9 void main()
10 {
11     for (int x = 0; x < 10; x++)
12         func();
13 }

会输出1到10的数,如果不用static,则会输出10次1

 

二,面向对象的static

  1. 类中的静态变量 声明为static的变量只被初始化一次,因为它们在单独的静态存储中分配了空间,因此类中的静态变量由对象共享,可以减小对象的大小。对于不同的对象,不能有相同静态变量的多个副本。也是因为这个原因,静态变量不能使用构造函数初始化。

注意:类中的静态成员变量必须在类内声明,在类外定义(被const修饰的除外).

 1 class Apple 
 2 { 
 3 public: 
 4     static int i;  // 类内声明
 5 
 6     Apple() 
 7     { 
 8         // Do nothing 
 9     }; 
10 }; 
11 
12 int Apple::i = 1;  // 类内定义
13 class Apple 
14 { 
15 public: 
16       // 被const修饰的static变量在c++11中可以在类内被直接初始化。
17     static const int i=10; 
18     Apple() 
19     { 
20         // Do nothing 
21     }; 
22 };

         2. 类中的静态成员函数 :静态成员函数也不依赖于类的对象。我们被允许使用对象和'.'来调用静态成员函数。但建议使用类名和范围解析运算符调用静态成员。静态成员函数仅能访问静态数据成员或其他静态成员函数,它们无法访问类的非静态数据成员或成员函数。

         3. 静态类 :和变量一样,静态类的生命周期直到程序的结束。在main结束后才会调用静态类的析构函数。

 

转自: https://zhuanlan.zhihu.com/p/152046509

posted on 2021-10-13 20:57  孤独的猫  阅读(46)  评论(0编辑  收藏  举报