スコープ
C++ の名前は、プログラムの特定の領域でのみ使用できます。 この領域は名前の "スコープ" と呼ばれます。 スコープは、静的なオブジェクトを表さない名前の "有効期間" を決定します。 スコープも、クラス コンストラクターおよびデストラクターが呼び出されたとき、およびスコープに対してローカルな変数が初期化されたときに名前の可視性を決定します。 (詳細については、「コンストラクター」および「デストラクター」を参照してください)。 スコープは 5 種類あります。
ローカル スコープ ブロック内で宣言された名前は、そのブロックと、そのブロックで囲まれているブロック内でのみ、および宣言の後でのみアクセス可能です。 関数の最も外側のブロックのスコープでは、関数への仮引数の名前は、関数本体の外側のブロック内で宣言された場合と同様に、ローカル スコープを持ちます。 次のコードがあるとします。
{ int i; }
i の宣言は中かっこで囲まれたブロックにあるため、コードが最後の中かっこの前にアクセスしないため、i にはローカル スコープがあり、アクセス可能ではありません。
**関数スコープ **ラベルは関数スコープを含む単なる名前です。 これらは関数内のどの位置でも使用できますが、その関数の外部からはアクセスできません。
**ファイル スコープ **すべてのブロックまたはクラスの外で宣言したどの名前にも、ファイル スコープがあります。 宣言の後、翻訳単位内の任意の場所でアクセスできます。 静的オブジェクトを宣言しないファイル スコープを持つ名前は、グローバル名とも呼ばれます。
C++ では、ファイル スコープは、名前空間スコープとも呼ばれます。
クラス スコープ クラス メンバーの名前にクラス スコープがあります。 クラス メンバー関数には、メンバー選択演算子 (. または –>)、またはオブジェクトまたはそのクラスのオブジェクトへのポインターに対するメンバーへのポインター演算子 (.* または –>*) を使用してのみアクセスできます。非静的クラス メンバーのデータは、そのクラスのオブジェクトに対してローカルであると見なされます。 クラス宣言の例を次に示します。
class Point { int x; int y; };
クラス メンバー x および y は、Point クラスのスコープ内にあると見なされます。
関数プロトタイプ内で宣言されているプロトタイプ スコープ名は、プロトタイプの末尾までのみ表示されます。 次のプロトタイプは、3 つの名前 (strDestination、numberOfElements、strSource) を宣言します。これらの名前は、プロトタイプの最後にスコープの外に出ます。
errno_t strcpy_s( char *strDestination, size_t numberOfElements, const char *strSource );