非常抱歉提出一个过于简单的问题,但是我似乎无法理解我正在阅读的书中的这个例子:
void f5()
{
int x;
{
int y;
}
}
什么是包围 `int y` 的大括号?你可以随意放置括号吗?如果可以,那么在什么情况下会这样做?这是否只是书中的错误?
非常抱歉提出一个过于简单的问题,但是我似乎无法理解我正在阅读的书中的这个例子:
void f5()
{
int x;
{
int y;
}
}
这样的大括号表示其中的代码现在处于不同的作用域。如果你试图在大括号外访问y,将会收到一个错误。
这是关于变量作用域的问题,例如:
void f5()
{
int x = 1;
{
int y = 3;
y = y + x; // works
x = x + y; // works
}
y = y + x; // fails
x = x + y; // fails
}
定义变量作用域。变量Y在大括号外部无法访问。
花括号表示作用域,变量x将在内部花括号的作用域中可见,但y将不会在它所在的花括号作用域之外可见。
y
将不可用。作用域退出时,内部对象被销毁。例如,您可以在括号中包含关键部分,并在那里构建一个锁对象。这样,当退出作用域(无论是正常退出还是因异常而退出)时,析构函数会自动调用,您就不必担心忘记解锁。
看起来像是一个错误(不知道上下文)
这样做会将值y封装在大括号内,因此在外部不可用。
当然,如果他们试图解释作用域,那么这可能是有效的代码。