局部对象
在C++中,名字(变量、函数、类型)有作用域(静态),对象有生命周期(动态)。
名字的作用域是程序文本的一部分,名字在其中可见。对象的生命周期是程序执行过程中该对象存在的一段时间。
形参和函数体内部定义的变量统称为局部变量,仅在函数的作用域内可见。
在所有函数体外定义的对象存在于程序的整个执行过程中。局部变量的生命周期则依赖于定义的方式。
自动对象
我们把只存在于块执行期间的对象称为自动对象。
普通的局部变量对应的对象,是自动对象,在每次调用函数时创建和销毁。
形参也是一种自动对象。函数开始时为形参申请存储空间,因为形参定义在函数体作用域内,所以一旦函数终止,形参也就被销毁。
局部静态对象
局部静态对象在程序的执行路径第一次经过对象定义语句时初始化,并且知道程序终止才被销毁,所以局部静态对象不是自动对象。
可以用static关键字来修饰局部变量,从而获得局部静态对象。
static int count = 0;
#include <iostream>
#include <string>
using namespace std;
int min(int num1, int num2, int num3);
//定义在所有函数体外的对象,为全局对象。
int a = 3;
int main()
{
//res的作用域为main()函数
int res = min(4, 8, 2);
//cout << res << endl;
res = min(3, 3, 6);
res = min(2, 3, 5);
return 0;
}
//num1/num2/num3为函数min()的形参
int min(int num1, int num2, int num3)
{
//res的作用域为min()函数
int res;
//局部静态变量,直到程序终止才被销毁
static int count = 0;
count += 1;
cout << count << endl;
res = num1 < num2 ? num1 : num2;
res = res < num3 ? res : num3;
return res;
}