可能重复:
C++ 中带括号的范围
我正在处理 v8 javascript 引擎,为我大学的新生开发学习环境,我加强了这一点:
d8.cc:309
char* input = NULL;
{ // Release lock for blocking input.
Unlocker unlock(isolate);
input = fgets(buffer, kBufferSize, stdin);
}
- 它叫什么名字?
- 我如何在其他情况下使用它?
- 只有在 c++ 中才公平吗?
可能重复:
C++ 中带括号的范围
我正在处理 v8 javascript 引擎,为我大学的新生开发学习环境,我加强了这一点:
d8.cc:309
char* input = NULL;
{ // Release lock for blocking input.
Unlocker unlock(isolate);
input = fgets(buffer, kBufferSize, stdin);
}
就语言标准而言,整体结构(即未命名的块)称为复合语句。它用于引入一个新的范围。
在 C++ 中,这通常有两种用途:
将局部变量限制为特定的代码部分;目的是尽量减少范围“污染”,并使代码读者更容易。(同样可以在其他语言中实现,例如 C 和 Java。)
严格控制对象/资源的生命周期,因为作用域局部变量的析构函数将在作用域结束时自动调用。这可以用于一些巧妙的事情,例如自动关闭文件句柄、释放互斥锁等等。因此,您可能会听到人们谈论例如作用域互斥锁。(C 和 Java 没有析构函数,所以这个概念不能翻译。)
它没有名字,它是一个代码块。大括号为 Unlocker 控制的锁设置了明确的生命周期。
这是 C 和 C++ 中完全有效的技术。在 C++ 中更有可能看到它,其中 RAII 用于限制对象的生命周期并提供及时的资源释放(例如锁),尽管在 C 中使变量的生命周期清晰可见是非常有用的读者。