21xrx.com
2024-06-02 23:13:45 Sunday
登录
文章检索 我的文章 写文章
C++中的static关键字及其作用说明
2023-07-05 02:40:25 深夜i     --     --
C++ static 作用 说明

C++中的static是一种关键字,用于指定变量、函数或类成员只在其定义所在的文件作用域内可见。此关键字在不同情况下有不同的作用,具体如下:

1. 静态局部变量

使用static关键字声明的局部变量只在函数内可见,但其作用域和存储周期与普通局部变量不同,静态局部变量在程序执行前就已经分配了空间,并且在整个程序运行期间都存在。这种变量有利于保留上一次函数调用的值,可以实现在函数内部进行数据持续计数等操作。

例如:


void func() {

  static int count = 0;

  count++;

  cout << "调用函数" << count << "次" << endl;

}

int main() {

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

    func();

  }

  return 0;

}

执行以上代码后,控制台输出:


调用函数1次

调用函数2次

调用函数3次

调用函数4次

调用函数5次

2. 静态全局变量

使用static关键字声明的全局变量只在定义它的文件中可见,其他文件无法访问。这种变量的定义和生命周期与普通全局变量相同,即在程序开始执行前分配空间,直到程序结束后才被释放。静态全局变量用于避免不同文件中的同名全局变量产生冲突,提高程序的可读性、可维护性。

例如:


// a.cpp

static int globalCount = 0;

// b.cpp

static int globalCount = 1;

int main()

  cout << "a.cpp中globalCount的值:" << globalCount << endl;

  cout << "b.cpp中globalCount的值:" << globalCount << endl;

  return 0;

运行以上代码后,输出:


a.cpp中globalCount的值:0

b.cpp中globalCount的值:1

3. 静态成员变量

使用static关键字声明的类成员变量是所有对象共享的,不同于非静态成员变量是每个对象特有的。静态成员变量的定义和初始化需要在类外进行,并且一般定义为private或protected,以保障数据的安全性。静态成员变量可以通过类名访问,而不需要通过对象。

例如:


class MyClass

public:

  static int count;

;

int MyClass::count = 0;

void func() {

  MyClass::count++;

  cout << "调用函数" << MyClass::count << "次" << endl;

}

int main() {

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

    func();

  }

  cout << "MyClass::count的值:" << MyClass::count << endl;

  return 0;

}

执行以上代码后,控制台输出:


调用函数1次

调用函数2次

调用函数3次

调用函数4次

调用函数5次

MyClass::count的值:5

综上所述,static关键字在C++中有着重要的作用,可以用于控制作用域、存储周期和访问权限,为程序设计带来便利和安全保障。

  
  

评论区

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