2

可能重复:
C++ 中带括号的范围

我正在处理 v8 javascript 引擎,为我大学的新生开发学习环境,我加强了这一点:

d8.cc:309

char* input = NULL;
{  // Release lock for blocking input.
  Unlocker unlock(isolate);
  input = fgets(buffer, kBufferSize, stdin);
}
  1. 它叫什么名字?
  2. 我如何在其他情况下使用它?
  3. 只有在 c++ 中才公平吗?
4

2 回答 2

6

就语言标准而言,整体结构(即未命名的块)称为复合语句。它用于引入一个新的范围。

在 C++ 中,这通常有两种用途:

  1. 将局部变量限制为特定的代码部分;目的是尽量减少范围“污染”,并使代码读者更容易。(同样可以在其他语言中实现,例如 C 和 Java。)

  2. 严格控制对象/资源的生命周期,因为作用域局部变量的析构函数将在作用域结束时自动调用。这可以用于一些巧妙的事情,例如自动关闭文件句柄、释放互斥锁等等。因此,您可能会听到人们谈论例如作用域互斥锁。(C 和 Java 没有析构函数,所以这个概念不能翻译。)

于 2013-01-01T15:30:28.340 回答
3

它没有名字,它是一个代码块。大括号为 Unlocker 控制的锁设置了明确的生命周期。

这是 C 和 C++ 中完全有效的技术。在 C++ 中更有可能看到它,其中 RAII 用于限制对象的生命周期并提供及时的资源释放(例如锁),尽管在 C 中使变量的生命周期清晰可见是非常有用的读者。

于 2013-01-01T15:31:48.577 回答