1. ホーム
  2. c++

[解決済み] case文の中で{}を使う。なぜ?

2022-12-18 09:21:51

質問

を使うことの意義は何ですか? {} の中に case 文の中にあるのでしょうか?通常、何行あっても case ステートメントに何行あっても、すべての行が実行されます。これは単に古い/新しいコンパイラに関するルールなのか、それとも何か裏があるのでしょうか?

int a = 0;
switch (a) {
  case 0:{
    std::cout << "line1\n";
    std::cout << "line2\n";
    break;
  }
}

int a = 0;
switch (a) {
  case 0:
    std::cout << "line1\n";
    std::cout << "line2\n";
    break;
}

どのように解決するのですか?

この {} の新しいブロックを表します。 スコープ .

次の非常に工夫された例を考えてみましょう。

switch (a)
{
    case 42:
        int x = GetSomeValue();
        return a * x;
    case 1337:
        int x = GetSomeOtherValue(); //ERROR
        return a * x;
}

コンパイラーエラーが発生します。 x がすでにスコープで定義されているため、コンパイラエラーが発生します。

これらを独自のサブスコープに分離することで、宣言する必要がなくなるので x をswitch文の外側で宣言する必要がなくなります。

switch (a)
{
    case 42: {
        int x = GetSomeValue();
        return a * x; 
    }
    case 1337: {
        int x = GetSomeOtherValue(); //OK
        return a * x; 
    }
}


警告

の中で変数を宣言し、初期化します。 case でなく {} を囲むのは誤りです。

#include <iostream>
using namespace std;
int main() {
    int b = 3;
    switch (b) {
    case 3:
        int a = 3; //compilation error: "initialization of 'a' skipped by 'case' label"
        return a * b;
    case 1:
        return a * b;
    }
}