• 自动对象和静态局部对象


    1、自动对象
    默认情况下,局部变量的生命期局限于所在函数的每次执行期间。只有当定义它的函数被调用时才存在的对象称为自动对象。自动对象在每次调用函数时创建和撤销。该类型局部变量存储在栈上,在动态存储区。
    局部变量所对应的自动对象在函数控制经过变量定义语句时创建。如果在定义时提供了初始化,那么每次创建对象时,对象都会被赋予指定的初值。对于未初始化的内置类型局部变量,其初值不确定。当函数调用时结束,自动对象就会被撤销。
    形参也是自动对象,其所占存储空间在函数调用时被创建,在函数结束时撤销。
    2、静态局部对象
    用static关键字修饰的局部变量。静态局部变量存储在静态存储区,生命期贯穿整个程序运行期间。作用域同自动局部变量。静态局部对象在所处模块初次运行时进行初始化工作,且只初始化一次。如果不初始化,编译器会自动为其赋初始值为0或空字符。

    如:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 int gel(void){
     5     static int cnt = 0;
     6     return cnt++;
     7 }
     8 
     9 int main(void){
    10     for(int i = 0; i < 10; i++){
    11         cout << gel() << " ";
    12     }
    13     cout << endl;
    14     //输出 0 1 2 3 4 5 6 7 8 9
    15     return 0;
    16 }

    第一点:对C++程序员来说,“变量”和“对象”一般可以互换使用。
    第二点:两者有明显区别,形参和函数体内部定义的变量统称为局部变量,局部变量的生命周期依赖于定义的方式。一个普通的局部变量就是自动对象,但一个静态局部变量就不是自动对象,因为它不会在程序执行到它定义所在的块的末尾时就被销毁。

  • 相关阅读:
    深度探索C++对象模型之第一章:关于对象之对象的差异
    深度探索C++对象模型之第一章:关于对象之关键词所引起的差异
    C++之constexpr
    STL之空间配置器
    10泛型算法
    C++之指针与数组区别
    数学 之 hdu 4861
    贪心 之 hdu 4864
    01背包(求前一个的最大价值-->求前K个的最大价值) 之 hdu 2639
    01背包(体积为负,改变区间) 之 poj 2184
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/8034904.html
Copyright © 2020-2023  润新知