1

ループで次を使用する場合:

    ostringstream glob;
    glob << "some words";
    cout<< "this is bob"<<glob.str()<<endl;

glob は反復ごとにリセットされます。ただし、ループの外側で glob を宣言すると、反復ごとに「いくつかの単語」が追加され続け、文字列がどんどん長くなります。

その理由を理解しようとしています。これは、ループが回るたびにこの変数がスタックからポップされているためでしょうか?

ループごとにグロブを「レッドクラリング」するとエラーが発生すると思いましたが、そうではありません....

4

3 に答える 3

3

スコープ内で variable を宣言すると、ループに入るたびに変数が作成 (構築) されます (スタック上にあります)。ループの外で宣言すると、再利用し続けるのは単一のインスタンスになります。

以下も参照してください。

于 2012-06-19T20:25:04.613 に答える
2

明確にするために、あなたはこれの違いについて尋ねています:

ostringstream glob;
for ( int i = 0; i < 100; ++i )
{
    glob << "some words";
    cout<< "this is bob"<<glob.str()<<endl;
}

この:

for ( int i = 0; i < 100; ++i )
{
    ostringstream glob;
    glob << "some words";
    cout<< "this is bob"<<glob.str()<<endl;
}

最初に、スコープがループ本体の外側にあるため、「glob」はループの前に一度初期化されます。2 番目の 'glob' はループ本体内 (ループ スコープを定義する中括弧内) にあるため、新しくスタックに配置され、反復ごとに初期化されます (反復ごとに破棄されます)。

于 2012-06-19T20:28:44.300 に答える
0

glob がループ内にある場合、そのスコープはループの各反復です。そのため、スコープ外になると削除され (スタックからポップされ)、次の反復で再作成されます (スタックにプッシュされます)。

glob がループの外にある場合、そのスコープはメソッドであり、メソッドが終了するまで削除されません。

于 2012-06-19T20:26:10.103 に答える