static关键字

全局变量

static 声明全局变量,不改变全局变量的存储位置与生命周期,仅改变全局变量的作用域,不被其他源文件通过 extern 调用。

局部变量

static 会将局部变量的存储位置更改为静态存储区,生命周期伴随程序运行的整个过程。

普通函数

普通函数不是类成员函数,使用 static 声明将限制函数的作用域,不被其他源文件通过 extern 调用;static 声明的函数在内存中仅存储一份拷贝。

一些优点:

  1. 避免了链接不同源文件时,发生变量名和函数名的冲突。
  2. 对 c 函数而言,对函数进行了信息屏蔽,只给当前文件的一些函数使用。

类 static 成员

static 使成员由”属于类对象“变为”属于类,不属于类对象“

数据成员

  1. static 的数据成员需要在类定义体外部进行定义
1
2
3
4
5
6
7
8
class BOOK
{
private:
//折扣
static float discount;
};
//在类定义体外部定义并初始化
float BOOK::discount = 0.95f;
  1. 例外,当使用const static时,可以在类定义体内初始化数据成员,但仍需要在类定义体外进行一次定义。
1
2
3
4
5
6
7
class BOOK
{
private:
//折扣
const static int discount=1;
};
const int BOOK::discount;

类成员函数

在类内部声明的 static 成员函数,在类定义体外部不需要重复指定 static 关键字。

static 成员函数不能被声明为 const。

作者

Erial

发布于

2022-09-22

更新于

2023-02-19

许可协议

评论