変数にアクセスできる領域は、そのスコープと呼ばれます。ローカルの非静的変数の場合、このスコープの境界は中括弧({
... }
)で定義されるため、次のようになります。
{
...
int a = 0;
switch (option)
{
case 1:
{
int b;
a = 2;
} // <-- the scope of b ends here
...
}
} // <-- the scope of a ends here
これは配列を作成するオプションであるため、randomVariable
内部で宣言する必要があることに注意してくださいcase 1:
C ++でプログラミングしているので、Cスタイルの配列の代わりに、を使用しますstd::vector
。これは、配列と同じようにメモリの連続ブロック内に要素を保持するコンテナですが、サイズが変わる可能性があります。
#include <vector>
...
{
std::vector<int> myVector;
switch (option)
{
case 1:
{
int size;
// value retrieved in run-time is assigned into size here
myVector.resize(size, 0);
}
case 2:
{
// you can use your vector here:
if (myVector.size() > 3)
myVector[2] = 7;
}
...
}
} // <-- end of myVector's scope
この例でmyVector.resize(size, 0);
は、ベクトルによって内部的に使用されるメモリのサイズを変更して、要素を保持するのに十分な大きさにします。size
サイズが大きくなると、このメモリに新しい要素を挿入し、それらをに初期化します0
。ここで重要なmyVector
のは、自動保存期間を持つオブジェクトです。つまり、実行が定義されたスコープから外れると、メモリが自動的にクリーンアップされます。これにより、動的に割り当てられたCスタイルの配列を使用する場合に注意しなければならない醜いメモリ管理から解放されます。