浅谈静态变量、成员变量、局部变量三者的区别
定义和声明
- 静态变量:在函数内部或类的成员变量之外声明的变量,具有静态存储持续时间,意味着在整个程序执行期间都会一直存在,并且只会给初始化一次。
- 成员变量:定义在类中的变量,只有在创建对象时才会被初始化,属于每个对象所特有,不同的对象具有独立的成员变量。
- 局部变量:定义在函数或者代码块内部的变量,只在函数内或者该代码块内有效,一旦离开该函数或者代码块,便失效。
存储位置
- 静态变量:存储在数据段,程序在运行时就已经分配了内存。
- 成员变量:存储在类对象中,对象在被创建时分配内存。
- 局部变量:存储在栈中,随着函数的调用和返回而生命周期结束。
生命周期
- 静态变量:从程序开始执行到程序结束都存在。
- 成员变量:随类对象的创建而存在,随类对象的销毁而销毁。
- 局部变量:从函数或代码块开始执行时创建,函数或代码块结束时销毁。
访问方式
- 静态变量:可以使用类名访问,也可以使用对象名访问。如果是通过类名访问,则需要加上作用域运算符。如果是通过对象名访问,需要加上"."运算符。
- 成员变量:只能通过类的对象访问,使用"."运算符访问。
- 局部变量:只能在函数内或者代码块内访问。
示例
示例1
#include <iostream>
using namespace std;
class Example {
public:
int x;
static int y;
Example(int a) {
x = a;
}
static void print() {
cout << "static variable y = " << y << endl;
// cout << "member variable x = " << x << endl; // 错误!静态成员函数不能访问非静态成员变量
}
};
int Example::y = 100; // 静态成员变量必须在类外面进行初始化
int main() {
Example e(10);
cout << "member variable x = " << e.x << endl;
cout << "static variable y = " << Example::y << endl;
Example::print();
return 0;
}
该程序展示了静态变量和成员变量的区别。静态变量y在类外面定义并初始化,成员变量x在对象创建时被初始化。静态函数print无法访问非静态变量x。
输出结果:
member variable x = 10
static variable y = 100
static variable y = 100
示例2
#include <iostream>
using namespace std;
void foo() {
int a = 1;
static int b = 1;
a++;
b++;
cout << "a = " << a << ", b = " << b << endl;
}
int main() {
foo();
foo();
foo();
return 0;
}
该程序展示了局部变量和静态变量的区别。在函数中声明的变量a是局部变量,每次调用函数时都会重新创建一个新的a变量。而变量b是静态变量,每次调用函数时不会声明新的变量,而是沿用上一次函数调用时的变量。因此,对b的修改在函数调用间是保留的。
输出结果:
a = 2, b = 2
a = 2, b = 3
a = 2, b = 4
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈静态变量、成员变量、局部变量三者的区别 - Python技术站