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

它正在定义范围。变量 Y 在大括号之外是不可访问的。

于 2011-09-30T15:27:02.870 回答
4

大括号表示范围,变量 x 将在内大括号的范围内可见,但 y 在其大括号范围之外不可见。

于 2011-09-30T15:27:40.913 回答
3

大括号定义范围级别。在大括号之外,y将不可用。

于 2011-09-30T15:27:44.873 回答
3

在作用域出口处,内部对象被破坏。例如,您可以将一个临界区括在大括号中并在那里构造一个锁定对象。然后您不必担心忘记解锁它 - 退出范围时会自动调用析构函数 - 无论是正常情况还是由于异常。

于 2011-09-30T17:13:10.957 回答
1

这看起来像一个错误(不知道上下文)

这样做你已经将值 y 装在这些大括号内,因此在它之外不可用。

当然,如果他们试图解释范围,那可能是有效的代码

于 2011-09-30T15:28:07.773 回答