C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++のスコープ解決演算子(::)とは?使い方をサンプルコード付きで解説

C++におけるスコープ解決演算子「::」は、特定のスコープに属する名前へ明示的にアクセスするための重要な演算子です。たとえば、グローバル変数と同じ名前のローカル変数が存在する場合、通常はローカル変数が優先されますが、「::変数名」と記述することでグローバル変数を呼び出せます。また、クラスの外部でメンバ関数を定義するときや、クラスのstaticメンバ変数にアクセスするときにも使用されます。

スコープ解決演算子の主な用途

  • 同名のグローバル変数へのアクセス:ローカル変数によって隠蔽されたグローバル変数を参照できます。
  • クラス外でのメンバ関数の定義:「戻り値の型 クラス名::関数名()」の形式で、クラス宣言の外側に関数本体を定義できます。
  • クラスのstaticメンバへのアクセス:「クラス名::メンバ名」の形式で静的メンバにアクセスできます。
  • 名前空間の指定:std::cout のように、名前空間に属する要素を指定する場合にも利用されます。

サンプルコード

以下は、C++におけるスコープ解決演算子の使用例です。

#include <iostream>
using namespace std;
char a = 'm';          // グローバル変数
static int b = 50;     // static変数

int main() {
    char a = 's';      // ローカル変数(グローバル変数aを隠蔽)

    cout << "The static variable : " << ::b;
    cout << "\nThe local variable : " << a;
    cout << "\nThe global variable : " << ::a;

    return 0;
}

実行結果

このプログラムを実行すると、次のような出力が得られます。

The static variable : 50
The local variable : s
The global variable : m

コードの解説

このプログラムでは、グローバル変数 a(値:'m')と、main関数内で宣言された同名のローカル変数 a(値:'s')が併存しています。main関数内で単に「a」と書いた場合はローカル変数が優先されるため、出力は「s」になります。一方、「::a」とスコープ解決演算子を付けると、隠蔽されたグローバル変数が参照され、出力は「m」になります。

同様に、static変数 b には「::b」でアクセスでき、値「50」が出力されます。このように、スコープ解決演算子を使えば名前の衝突が発生した場合でも、目的の変数やクラスのメンバを明確に指定することができます。

  1. C#のスコープ解決演算子(::)とは?名前空間エイリアスの使い方を実例で解説

    スコープ解決演算子(::)とはC#におけるスコープ解決演算子「::」は、C++の同名の演算子とは役割が大きく異なります。C++では「::」はグローバル変数やクラスの静的メンバーへのアクセスに用いられますが、C#では主に名前空間エイリアスを修飾するために使用されます。なぜスコープ解決演算子が必要なのか異なる名前空間に同じ識別子を持つ型が存在する場合、どちらの型を参照したいのかを明示する必要があります。このようなときにスコープ解決演算子を使うことで、参照先の曖昧さを解消できます。たとえば、標準の System.Console クラスを確実に参照したい場合は、global名前空間エイリアスと組み合わ

  2. C#のスコープ解決演算子(::)の使い方と活用シーンを徹底解説

    C#におけるスコープ解決演算子(::)とはC++では、スコープ解決演算子「::」はグローバル変数へのアクセスなどに使われますが、C#では主に名前空間(namespace)に関連して使用される点が大きな違いです。具体的には、異なる名前空間に同じ識別子(クラス名など)が存在し、名前が衝突している場合に、どちらの型を参照するのかを明確に指定するために使います。globalエイリアスとの組み合わせ代表的な使用例として、global::System.Console のように、グローバル名前空間エイリアスと組み合わせて System.Console クラスを参照する方法があります。この書き方をすれば、仮に