0

C++ プログラムは次のようになります。

class Foo
{ 
    // something here
};

int main ()
{
     Foo f_A;
     Foo f_B;
     Foo f_C;
     //do something here

     return 0;
}

f_Ag++ では、 の前f_Bに構築し、後f_Bf_B分解し、後に分解することが証明されていf_Cます。シーケンスを決定するものは何ですか? コンパイラ関連ですか?

4

2 に答える 2

6

施工の逆順になります。これは、C++ 標準で指定されています。

于 2013-04-11T12:08:45.743 に答える
5

C++ 標準では、順序が指定されています。

パラグラフ 6.7/2:

自動保存期間 (3.7.3) を持つ変数は、その宣言ステートメントが実行されるたびに初期化されます。ブロックで宣言された自動保存期間を持つ変数は、ブロックの終了時に破棄されます (6.6)。

これは、構築の順序が、変数が上記のソースにリストされている順序と同じであることを意味します。これは重要です...

パラグラフ 6.6/2:

スコープから出ると (どのように達成されても)、そのスコープで構築された自動保存期間 (3.7.3) を持つオブジェクトは、それらの構築の逆の順序で破棄されます。

于 2013-04-11T12:10:20.833 に答える