CC++中static关键字的作用详细总结

    技术2025-10-02  5

    一、C语言中static关键字的用法主要体现在三方面:对全局变量、局部变量、函数 1、全局变量 static修饰全局变量,会改变全局变量的作用域;static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。

    2、局部变量

    static修饰局部变量,会改变局部变量的生命周期;static修饰局部变量,这个局部变量就成了静态局部变量,会改变局部变量的存储特性,使局部变量由之前存储在栈上改为存储在静态存储区。 static修饰局部变量,这个局部变量具有记忆功能,并且static变量只存一份即同一地址,所以不管函数调用多少次,函数内定义static变量的语句只会在第一次调用时执行,后面调用都不执行也不再初始化,而是对该地址内的数据进行操作。

    void test() { static int a = 0; a++; cout << a << endl; } int main() { test(); test(); test(); return 0; }

    输出结果 1 2 3

    3、函数 函数的实现使用static修饰,那么这个函数只可在本cpp内使用,不会同其他cpp中的同名函数引起冲突; 在函数返回类型前加static,函数就定义为静态函数。函数的定义和声明在默认情况下都是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。

    二、C++中可以使用static修饰类成员–静态成员

    1、static修饰成员变量 类的静态成员每个类只有一个,静态成员为所有的类的实例对象共享,不会影响sizeof结果 静态成员变量在类中只是声明,必须将其放在类外进行初始化

    //在test.h文件中: class A { public: static int a; //静态数据成员声明 } //在test.cpp文件中: int A::a = 1; //静态数据成员的定义和初始化

    是类的属性,不属于某个具体的对象 不能将其放到构造函数列表初始化 访问方式:可以通过对象访问 || 类名 :: 2、static修饰成员函数 静态成员函数没有隐藏的this指针 静态成员函数中不能访问非静态的成员变量、非静态的成员函数 静态成员函数不能用const修饰 静态成员函数不能为虚函数 调用方式:对象.静态成员函数 || 类名::静态成员函数

    #include <iostream> using namespace std; class M { public: M(int a) { A = a; B += a; } static void f1(M m); private: int A; static int B; }; void M::f1(M m) { cout << "A = " << m.A << endl; //静态成员函数中通过对象来引用非静态成员 cout << "B = " << B << endl; } int M::B = 0; //静态数据成员初始化的格式<数据类型><类名>::<静态数据成员名>=<值> int main() { M P(5), Q(10); M::f1(P); //静态成员函数调用时不用对象名 M::f1(Q); return 0; }

    输出结果 A = 5 B = 15 A = 10 B = 15

    Processed: 0.014, SQL: 9