21xrx.com
2024-11-25 01:16:03 Monday
登录
文章检索 我的文章 写文章
C++语言中的static关键字用法详解
2023-07-07 10:35:18 深夜i     --     --
C++语言 static 用法 详解

在C++语言中,static是一个比较常用的关键字,它可以用在变量、函数和类的成员函数上。本文将详细解释static关键字在各种场景下的使用方法。

1. static变量

static变量是指在函数内或者类中声明的变量,在整个程序运行期间都保持不变,它的生命周期与程序的生命周期相同。static变量只会在程序第一次执行到定义它的语句时被初始化,以后再次执行该函数或函数外其它代码都不会再次初始化,而是继续使用之前的值。

例如:


#include <iostream>

using namespace std;

void func()

{

  static int a = 0;

  a++;

  cout << a << endl;

}

int main()

{

  for(int i = 0; i < 5; i++)

  {

    func();

  }

  return 0;

}

上面的代码运行结果为:


1

2

3

4

5

在func函数中定义了一个static变量a,并且每次执行完该函数后,a的值都会加1,由于a是static变量,所以其值在各次调用中都被保留下来。

如果将a改成普通的局部变量,如下所示:


#include <iostream>

using namespace std;

void func()

{

  int a = 0;

  a++;

  cout << a << endl;

}

int main()

{

  for(int i = 0; i < 5; i++)

  {

    func();

  }

  return 0;

}

运行结果为:


1

1

1

1

1

可以看到,每次执行func函数时,a的值都被重新初始化为0,所以每次输出的都是1。

2. static函数

在类中定义的static函数是属于整个类的,而不是属于某个对象的,因为它不需要访问对象的成员变量和成员函数。static函数可以被类名直接调用,也可以被对象调用。

例如:


#include <iostream>

using namespace std;

class Demo

{

public:

  static void func()

  

    cout << "Hello world!" << endl;

  

};

int main()

{

  Demo::func();

  Demo d;

  d.func();

  return 0;

}

上面的代码运行结果为:


Hello world!

Hello world!

可以看到,即使没有创建类的对象,也可以调用类中的static函数。

3. static类成员变量

在类中定义的static成员变量,是在整个类范围内共享的,并且它只有一份内存空间,不管该类的对象有多少个,该变量都只被分配一次。static成员变量必须在类外进行初始化。

例如:


#include <iostream>

using namespace std;

class Demo

public:

  static int a;

;

int Demo::a = 0;

int main()

{

  Demo d1;

  d1.a++;

  Demo d2;

  d2.a++;

  cout << Demo::a << endl;

  return 0;

}

上面的代码运行结果为:


2

可以看到,两个对象都修改了类的static成员变量a,最后输出的结果为2。

4. static类成员函数

在类中定义的static成员函数,也是属于整个类的,它可以访问类的static变量和static函数,但是不能访问非static成员变量和成员函数。static成员函数可以直接使用类名调用,也可以通过对象调用。

例如:


#include <iostream>

using namespace std;

class Demo

{

public:

  static int a;

  static void func()

  

    cout << "a = " << a << endl;

  

};

int Demo::a = 0;

int main()

{

  Demo d;

  Demo::a++;

  Demo::func();

  d.a++;

  d.func();

  return 0;

}

上面的代码运行结果为:


a = 1

a = 2

可以看到,static成员函数可以直接使用类名调用,也可以通过对象调用。本例中,改变类的static变量a的值,再通过类名和对象分别调用static成员函数,可以看到它们输出的a的值都是1和2。

总结:

在C++语言中,static关键字可以应用于变量、函数和类的成员函数中。static变量的生命周期在整个程序中保持不变,只会在第一次调用该变量时被初始化,static函数和成员函数属于整个类而不是某个对象,可以通过类名和对象分别调用。而static类成员变量和函数也属于整个类范围,可以直接访问类中的static变量和函数,但是不可以访问非static成员变量和函数。对于一些需要同步变化的变量和函数,或采用比较通用的方式访问变量和函数时,static关键字是非常实用和有效的。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复