9

この非常に単純な質問で申し訳ありませんが、私が読んでいる本でこの例を理解できないようです:

void f5()
{
    int x;
    {
        int y;
    }
}

周囲のブレースは何のint yためにありますか? 好きな場所にブレースを配置できますか? もしそうなら、いつ、なぜそうするのですか、それともこれはただの間違いですか?

4

7 に答える 7

13

このような中かっこは、中かっこ内のコードが別のスコープにあることを示しています。中かっこの外で y にアクセスしようとすると、エラーが発生します。

于 2011-09-30T15:27:00.403 に答える
6

これは、変数のスコープの問題です。例:

void f5()
{
    int x = 1;
    {
        int y = 3;
        y = y + x;          // works
        x = x + y;          // works
    }
    y = y + x;              // fails
    x = x + y;              // fails
}
于 2011-09-30T15:29:43.567 に答える
4

中括弧はスコープを示し、変数xは中括弧のスコープ内に表示されますが、yは中括弧スコープの外側には表示されません。

于 2011-09-30T15:27:40.913 に答える
4

範囲を定義しています。変数 Y は中かっこの外ではアクセスできません。

于 2011-09-30T15:27:02.870 に答える
3

中括弧はスコープレベルを定義します。中かっこ以外はy使用できません。

于 2011-09-30T15:27:44.873 に答える
3

スコープ出口で、内部オブジェクトが破棄されます。たとえば、クリティカルセクションを中かっこで囲み、そこにロックオブジェクトを作成できます。そうすれば、ロックを解除するのを忘れることを心配する必要はありません。スコープを終了すると、通常または例外のために、デストラクタが自動的に呼び出されます。

于 2011-09-30T17:13:10.957 に答える
1

それはエラーのように見えます(コンテキストがわからない)

値yを中括弧の内側に囲んでいるため、中括弧の外側では使用できません。

もちろん、彼らがスコープを説明しようとしているのであれば、それは有効なコードである可能性があります

于 2011-09-30T15:28:07.773 に答える