2011-09-30 117 views
9

我这个过于简单化的问题道歉,但我似乎无法找出这个例子在书中我读:有人可以解释这段代码(为什么这些括号在这里)?

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

什么是围绕int y的括号?你可以随身携带牙套吗?如果是这样,何时以及为什么要这样做,或者这只是书中的错误?

+2

这是一种技术,主要应用于C语言,用于在第一个语句后创建本地临时值。当执行退出结束大括号时,在该范围内创建的所有变量消失。 –

回答

13

大括号表示大括号内的代码现在处于不同的范围。如果您尝试访问大括号外的y,则会收到错误消息。

+0

这是有道理的,但是令我困惑的是我认为这必须在一个函数内。如果你可以在一个函数中放置大括号,我看不出为什么你需要使用嵌套函数 - 或者我在左边的字段中? – Gary

+4

一个函数有它自己的作用域,但是也可以在一个函数中有作用域。这可能非常有用,例如C++对象具有析构函数,当对象超出范围时,这些对象可用于在特定点释放资源。你可能想要做这个中间功能。 – Benj

4

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

4

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

3

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

1

这看起来像一个错误(不知道的情况下)

这样做,你已装箱的括号内的值y,因此无法使用外面。

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

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 
} 
3

在范围出口内的对象销毁。例如,您可以将一个关键部分放在花括号中,并在那里构建一个锁定对象。然后,您不必担心忘记解锁它 - 在正常情况下或因为例外情况而退出范围时,会自动调用析构函数。

相关问题