自动对象和静态局部变量的区别
程序员文章站
2022-04-18 18:47:26
...
原文链接:https://blog.csdn.net/Mary19920410/article/details/70172303
1、自动对象
默认情况下,局部变量的生命期局限于所在函数的每次执行期间。只有当定义它的函数被调用时才存在的对象称为自动对象。自动对象在每次调用函数时创建和撤销。该类型局部变量存储在栈上,在动态存储区。
局部变量所对应的自动对象在函数控制经过变量定义语句时创建。如果在定义时提供了初始化,那么每次创建对象时,对象都会被赋予指定的初值。对于未初始化的内置类型局部变量,其初值不确定。当函数调用时,自动对象就会被撤销。
形参也是自动对象,其所占存储空间在函数调用时被创建,在函数结束时撤销。
2、静态局部对象
用static关键字修饰的局部变量。静态局部变量存储在静态存储区,生命期贯穿整个程序运行期间。作用域同自动局部变量。
静态局部对象在所处模块初次运行时进行初始化工作,且只初始化一次。如果不初始化,编译器会自动为其赋初始值为0或空字符。
例如:
#include <iostream>
using namespace std;
void test(){
//自动对象和静态局部变量的作用域一样,都在函数体内,但生存周期不同
int a = 1; //自动对象(普通局部变量)
static int b; //静态局部变量,存储在静态存储区
int c; //未初始化的内置类型局部变量,其初值不确定
static int d; //默认初值0
cout<<"c: "<<c<<"d: "<< d <<endl;
}
size_t count_calls(){
static size_t ctr = 0;
return ++ ctr;
}
int main(){
test();
for(size_t i = 0; i != 10; i ++)
cout << count_calls()<<endl;
return 0;
}
推荐阅读
-
Intent传递对象之Serializable和Parcelable的区别
-
static - 请问下PHP中5.3之前的版本和5.3之后的版本在静态化类 上面有什么区别吗?
-
详谈js中数组(array)和对象(object)的区别
-
&和&&的共同点和区别、Java字符含义和Java创建对象的几种方式
-
php函数、类和对象以及类的封装、继承、类的静态方法、静态属性,php静态
-
理清js中数组与对象的区别-数据类型和Json格式
-
静态方法和动态方法调用的区别
-
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间,_PHP教程
-
JavaSE的包装类,自动装箱和自动拆箱 ,字符窜转换,toString(),equals(), hashCode()的区别
-
静态成员函数和(CPP与C结构体的区别)