21xrx.com
2025-03-28 00:20:56 Friday
文章检索 我的文章 写文章
C++语言中的static关键字用法详解
2023-07-07 10:35:18 深夜i     12     0
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关键字是非常实用和有效的。

  
  

评论区

请求出错了