Может ли кто-нибудь объяснить этот фрагмент (почему эти скобки здесь)? - PullRequest
9 голосов
/ 30 сентября 2011

Я прошу прощения за этот чрезмерно упрощенный вопрос, но я не могу понять этот пример в книге, которую читаю:

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

Для чего нужны скобки, окружающие int y?Можете ли вы поставить брекеты, где вы хотите?Если да, то когда и почему вы это сделаете или это просто ошибка в книге?

Ответы [ 7 ]

13 голосов
/ 30 сентября 2011

Подобные скобки указывают, что код внутри скобок теперь находится в другой области видимости.Если вы попытаетесь получить доступ к y вне скобок, вы получите сообщение об ошибке.

6 голосов
/ 30 сентября 2011

Это вопрос переменных области действия, например:

void f5()
{
    int x = 1;
    {
        int y = 3;
        y = y + x;          // works
        x = x + y;          // works
    }
    y = y + x;              // fails
    x = x + y;              // fails
}
4 голосов
/ 30 сентября 2011

Скобки обозначают область видимости, переменная x будет видна в области видимости внутренней фигурной скобки, но y не будет видна за пределами области видимости ее фигурной скобки.

4 голосов
/ 30 сентября 2011

Это определяет сферу. Переменная Y недоступна вне фигурных скобок.

3 голосов
/ 30 сентября 2011

На выходе из прицела внутренние объекты разрушены.Вы можете, например, заключить критическую секцию в фигурные скобки и создать там объект блокировки.Тогда вам не нужно беспокоиться о том, чтобы забыть разблокировать его - деструктор вызывается автоматически при выходе из области действия - как обычно, так и из-за исключения.

3 голосов
/ 30 сентября 2011

Фигурные скобки определяют уровень области.Вне скобок y не будет доступно.

1 голос
/ 30 сентября 2011

Это выглядит как ошибка (не зная контекста)

Делая так, что вы поместили значение y в квадратные скобки, и поэтому НЕ доступны вне его.

Конечно,если они пытаются объяснить сферу, это может быть действительный код

...