【C++Primer笔记】局部对象

在C++语言中, 名字有作用域, 对象有生命周期

  • 名字的作用域是程序文本的一部分, 名字在其中可见

  • 对象的生命周期是程序执行过程中该对象存在的一段时间

  • 形参函数体内部定义的变量统称为局部变量, 它对函数而言是"局部"的, 仅在函数的作用域内可见, 同时局部变量还会隐藏在外层作用域中同名的其他所有声明中.

自动对象
  1. 只存在于块执行期间的对象称为自动对象, 当块的执行结束后, 块中创建的自动对象的值就变成未定义的了.
  2. 形参是一种自动对象.
局部静态对象
  1. 有必要令局部变量的生命周期贯穿函数调用及之后的时间, 可将局部变量定义成 static 类型从而获得这样的对象.
  2. 局部静态对象在程序的执行路径第一次经过对象定义的语句时初始化, 并且直到程序终止时才被销毁, 在此期间即使对象所在的函数结束执行也不会对它有影响. 例子如下:
// 定义计数函数
size_t count_calls(){
    static size_t ctr = 0;  //局部静态变量ctr
    return ctr++;
}
// 定义错误的计数函数
size_t wrong_count_calls(){
    size_t ctr = 0;  //自动对象ctr
    return ctr++;
}

int main(){
    // 调用正确的计数函数
    for(size_t i = 0; i <= 10; i++){
        cout << count_calls() << endl;
    }
    
    // 调用错误(未使用局部静态变量)的计数函数
    for(size_t i = 0; i <= 10; i++){
        cout << wrong_count_calls() << endl;
    }
    
    // cout << ctr << endl; // 此行会报错!
    return 0;
}

输出如下

执行完成,耗时:0 ms
0
1
2
3
4
5
6
7
8
9
10
0
0
0
0
0
0
0
0
0
0
0

  1. 若局部静态变量没有显式的初始值, 他将执行值初始化, 内置类型的局部静态变量初始化为 0.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值