1.Static local variables:Persisteny storage
static修饰的本地变量可以看作全局变量,只能初始化一次,拥有只能在该函数中访问的属性
#include<iostream>
#include<stdio.h>
using namespace std;
int f() {
static int i=0;
i++;
return i;
}
int main() {
for (int j = 0; j < 10; j++) {
cout << f() << endl;
}
return 0;
}
结果: 1 2 3 4 5 6 7 8 9 10
静态本地变量i只在第一次进函数时被初始化为0,每次i++可以看作对全局变量i++,i只能在函数f体内进行操作,在其他地方会未定义标识符;
2.Static member variables:Shared by all instances
静态成员变量所有对象都可以访问,并且它的值保持一致
class A
{
public :
static int i; //i相当与全局变量,在这只是声明,需要在.cpp中初始化
public :
A();
void set(int i);
void print();
};
#include "A.h"
#include<iostream>
using namespace std;
int A::i = 10;
A::A() { //不能直接在放在初始化列表中,i只能在被定义的时候初始化
i = 0;
}
void A::set(int i) {
this->i = i;
}
void A::print() {
cout << i << endl;
}
#include<iostream>
#include<stdio.h>
#include "A.h"
using namespace std;
int main() {
A a, b;
a.set(10);
a.print();
cout << b.i << endl;
cout << A::i << endl; //如果i是public可以直接用类名访问
return 0;
}
3.Static member function: Shared by all instances,can only access static member variables
c++成员函数属于类,不属于对象,成员变量属于对象,private修饰的变量可以让不同的对象访问
当成员函数用static修饰,可以在没有对象前访问该函数,静态成员函数中不能使用非静态的东西,静态的成员函数没有this(为了可以在没有对象时调用)