【共读Primer】41.[6.1]函数基础-局部对象 Page185
对名字而言有作用域的限制
名字的作用域是程序文本的一部分,名字在其中可见。
对对象而言有生命周期的限制。
对象的生命周期是程序执行过程中该对象存在的一段时间
函数体由两个花括号组成的范围是一个新的作用域。
所有在这个作用域内定义的变量都是局部变量,仅在这个作用域内可见。
局部变量还会隐藏外层作用域中的同名声明。
在函数退出是所有局部变量的生命周期结束。
而声明在所有函数体之外的定义的对象存在于程序的整个执行过程中,直到整个程序结束才会被销毁。
自动对象
只存在于快执行期间的对象成为自动对象。
局部静态对象
在局部变量前加上static关键字即可变为局部静态对象。
以下代码为大家演示了自动对象和局部静态对象的差别。
局部静态对象可以持续的访问,而局部对象就不是可以持续访问的,每次都会被重新初始化
#include <iostream> #include <string> using std::cout; using std::endl; size_t count_calls() { // 调用结束后,这个值仍然有效,但外部仍然不可访问 static size_t ctr = 0; return ++ctr; } size_t get_int() { int ctr = 1; return ++ctr; } int main() { for (size_t i = 0; i != 10; ++i) { cout << i << " times call count_calls return value = " << count_calls() << endl; cout << i << " times call get_int return value = " << get_int() << endl; } }