これは、使用した変数の新しいスコープを作成します。変数の範囲は時々トリッキーになることがあります。たとえば、あなたが掲示したコードの中で。
switch(x)
{
case(a):
{
int i = 0;
}
break;
case(b):
i = 1; // Error: The name 'i' doesn't exist in the current context
break;
}
エラーが範囲の外にアクセスさcase(b)
変数a
のように、ここで理にかなっています。一方では、
switch(x)
{
case(a):
{
int i = 0;
}
break;
case(b):
int i = 1; // Error: A local variable named 'i' cannot be declared in this scope because it would give a different meaning to 'i', which is already used in a 'child' scope to denote something else
break;
}
上記の2つのエラーは、互いに矛盾しています。これを回避するには、
switch(x)
{
case(a):
{
int i = 0;
}
break;
case(b):
{
int i = 1; // No error
}
break;
}
エリックリペットはcase文で変数のスコープを説明するために非常に良いlink to his blogを共有し、両方のcase文で別々に範囲を定義する必要があります。あなたはそれを見ておくべきです。
出典
2012-04-10 19:42:08
ABH
ケースAで定義された変数はそのブロックでのみ表示されていることを除いて違いはありません。 –
本当に何もありません。ケースにスコープされているオブジェクトを作成して使用することが時々あります。角かっこなしでは、あなたが見る範囲が広いことを定義するものは何もありません。 – Robinson
あなたが尋ねたものではありませんが、長い 'case'ブロックが読みにくいことがわかりました。スコープやその他の複雑さが必要な場合は、新しいメソッドを取得します。 –