C ++オブジェクト指向 - 第三ジョブ

職種:第5章で学ぶためのムーのレッスン。そして、あなたがコンピュータのテストでコードを実行するには、意味のある知識や難しさを考えるいずれかを選択し、完全な実験的な検証プロセスを記述します。実験的に知識のポイントを使用することを証明しました。



変数のライフサイクルの分析

まず、ライフサイクルの定義:プログラムは時間の存在を実行した変数。

第二に、分類:

1、グローバル変数

実行中のプログラムがありました。

2、グローバル静的変数

実行中のプログラムがありました。

3、ローカル変数

プログラムはローカルスコープが不足すると、変数はちょっと、正確な破壊であることを、姿を消しました。

4、静的ローカル変数

実行中のプログラムがありました。(この理解は、私がこの記事を書いたここで私は明らかだ、同じではないと思われる前に)

第三に、検証のプロセス

以下のコードを見てください:

#include <iostream>

using namespace std;
int entire_a = 1;//赋了初值的全局变量
int entire_b;//全局变量
static int entire_c;//全局静态变量

void Local1()//验证静态局部变量只在第一次进入的时候做初始化,以后会跳过初始化语句,保留原来的值
{
    int i = 10;
    while (i <= 20)
    {
        static int n = 1;//静态局部变量
        n += 1;
        static int local_t = 2;
        i += local_t;
    }
}
void Local2()
{
    int local_s = 6;//局部变量
    cout << local_s;
    static int local_t = 3;//静态局部变量
    cout << "local_t = " << local_t << ",local_s = " << local_s << endl;
}

int main()
{
    Local1();
    cout << "a = " << entire_a << ",b = " << entire_b << ",c = " << entire_c << endl;//输出全局变量的初始值
    entire_a = 11;//改变全局变量a的值
    entire_b = 121;//改变全局变量b的值
    entire_c = 131;//改变全局静态变量c的值
    cout << "a = " << entire_a << ",b = " << entire_b << ",c = " << entire_c << endl;//输出修改之后之后的全局变量值

    Local2();//调用函数Local(),输出局部变量local_s的值和局部静态变量local_t的值
    int local_s = 66;//重新定义的新的局部变量local_s
    static int local_t = 33;//重新定义的新的局部变量local_t
    cout << "local_t = " << local_t << ",local_s = " << local_s << endl;//可以输出新的局部变量local_s和新的局部变量local_t
 }


、Bを見ることができるように、すなわち、コンパイル時にメモリを割り当てると、グローバルオブジェクトを初期化し、グローバルに存在していたC、しかし主な機能に使用される時間とlocal_t local_sは、新しい変数を再生成するために、対応する(しない再定義する必要がありa)の前に、またはこれは、以下の問題があります

静的ローカル変数の宣言

void Local1()//验证静态局部变量只在第一次进入的时候做初始化,以后会跳过初始化语句,保留原来的值
{
    int i = 10;
    while (i <= 20)
    {
        static int n = 0;//静态局部变量
        n += 1;
        static int local_t = 2;
        i += local_t;
    }
}




これら三つの初期化の数値はn = 0から分かるように、スキップされた最初の時間の後に、描くことができる:静的ローカル変数は大域変数と等価である(のみ、この機能にアクセスすることができるが、ライフサイクルとほぼ同じグローバル変数)は、関数の後にまだ変数を終了しますが、唯一のエントリの最初の時間を行うことが第一で、将来的には、元の値を保持して、初期化ステートメントをスキップします。

結論:

1、変数のスコープは、ライフサイクルとは異なります。中の変数のスコープとライフサイクルの属性空間と時間は、 2次元を反映しています。スコープを参照することができる変数の範囲であり、ライフサイクルは、一定の期間を参照できる変数です。変数のスコープと存続期間を指定するには、C ++には多くの方法があります。最も一般的な、例えば:のように、{} static修飾子。
グローバルデータのライフサイクルの可変領域に格納されている2は、プログラム全体に存在するが、データは、機能の範囲の端部にスタックに格納されている、などである静的変数に加えて、スタックとローカル変数の破壊につながりますスタックに保存されています。静的変数のグローバルまたはローカル宣言のグローバル変数領域にあるかどうかをプログラムに格納されています。したがって、静的ローカル変数のライフサイクルは、プログラムの実行中に存在しています

おすすめ

転載: www.cnblogs.com/xiaonannanbuchengxian/p/11610293.html