概述
什么是静态变量?
静态变量是指变量的地址在程序的声明周期是静态的、不变的。
静态变量的分类
根据静态变量的声明位置不同,我们把静态变量分为三类:全局静态变量、局部静态变量、类中静态变量。
局部静态变量
- 静态局部变量只能进行特定的局部访问。在程序运行期间不释放。 局部静态变量在函数调用结束后依然存在,但其他函数不可见。
- 对静态局部变量是在编译时赋初值的,即只赋值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上一次函数调用结束时的值。
- 静态局部变量声明和定义是同时进行的。 若不指定值,则使用默认值。
#include <iostream>
void func()
{
static int n;
n = n + 1;
std::cout << "静态局部变量n的值为:" << n << std::endl;
}
int main()
{
for(int i = 0; i < 10; ++i)
func();
return 0;
}
/*output
静态局部变量n的值为:1
静态局部变量n的值为:2
静态局部变量n的值为:3
静态局部变量n的值为:4
静态局部变量n的值为:5
静态局部变量n的值为:6
静态局部变量n的值为:7
静态局部变量n的值为:8
静态局部变量n的值为:9
静态局部变量n的值为:10
*/
类内静态成员
静态成员变量
类的静态成员必须在类内声明,在类外定义(分配空间并初始化)。
注意:静态常量属性可以在声明的同时进行初始化。
class A
{
private:
static const int a = 0; // correct
// static int b = 0; // error
static std::mutex mtx; // 声明
};
std::mutex A::mtx; // 定义
静态变量的类外定义形式
变量类型 类名::变量名 = 值。
value_type className::var_name = value;
int A::data = 1;
其他
- 静态成员变量属于整个类所有。
- 可以通过类名直接访问公有静态成员变量。也可以通过对象名访问公有静态成员变量。
静态成员函数
整个类所有,没有this指针
静态成员函数只能访问类的静态成员变量和静态方法,不能访问一般的成员。 一般成员函数可以访问静态成员变量和静态方法。
全局静态变量
全局变量和全局静态变量的区别?
全局变量是不显示用static修饰的全局变量,但全局变量默认是静态的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern 全局变量名的声明,
全局静态变量是显示用static修饰的全局变量,作用域是所在的文件,其他的文件即使用extern声明也不能使用。
把局部变量改变为静态变量之后是改变了它的存储方式和生命期。 把全局变量改变为静态变量之后是改变了它的作用域,限制了使用范围
期待
如果文章存在错误或需要补充,还请不要吝啬,给予指正或补充。非常感谢。
参考
C++中变量声明与定义的规则_TOMOCAT的博客-CSDN博客
C++静态变量_c++静态成员函数里的静态变量未定义_城东小路的博客-CSDN博客
C++中的静态局部变量_c++ 局部静态变量__范迪塞尔_的博客-CSDN博客
C++ 全局变量和全局静态变量有什么区别呢?(小知识:对变量和常量的认识)_c++静态变量和全局变量的区别_sky_share的博客-CSDN博客