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++ では、通常、これには次の 2 つの用途があります。

  1. ローカル変数をコードの特定のセクションに制限するには; その目的は、スコープの「汚染」を最小限に抑え、コードを読みやすくすることです。(C や Java などの他の言語でも同じことができます。)

  2. スコープ ローカル変数のデストラクタがスコープの最後で自動的に呼び出されるため、オブジェクト/リソースの有効期間を厳密に制御します。これは、ファイル ハンドルを自動的に閉じたり、mutex を解放したりするなど、いくつかの巧妙なことに使用できます。そのため、スコープ付きミューテックスなどについて人々が話しているのを聞くかもしれません。(C と Java にはデストラクタがないため、この概念は解釈されません。)

于 2013-01-01T15:30:28.340 に答える
3

名前はなく、コードのブロックです。中括弧は、Unlocker によって制御されるロックに明示的な有効期間を設定します。

これは、C および C++ で完全に有効な手法です。RAII を使用してオブジェクトの有効期間を制限し、リソース (ロックなど) をタイムリーに解放する C++ で見られる可能性が少し高くなりますが、C では変数の有効期間を明確にするのに非常に役立ちます。読者。

于 2013-01-01T15:31:48.577 に答える