C ++中没有关键字的语句块

时间:2013-01-01 15:25:20

标签: c++

  

可能重复:
  Scope with Brackets in 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 ++中是否公平?

2 个答案:

答案 0 :(得分:5)

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

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

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

  2. 紧紧控制对象/资源的生命周期,因为范围局部变量的析构函数将在范围的末尾自动调用。这可以用于几个聪明的事情,例如自动关闭文件句柄,释放互斥锁等。所以你可能听到人们谈论例如作用域的互斥锁。 (C和Java没有析构函数,所以这个概念不会翻译。)

答案 1 :(得分:3)

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

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