スコープ解決演算子 | Programming Place Plus 用語集

トップページ用語集

名称 🔗

解説 🔗

いくつかのプログラミング言語に存在する演算子の一種で、識別子がどのスコープにあるものかを明示的に指定するために使用されます。

たとえば同名の識別子(変数名や関数名など)が複数のスコープ(名前空間クラスなど)に存在する場合、いま使おうとしている識別子がどのスコープに属しているものであるかを明確にしなければなりません。このようなときにスコープ解決演算子を使用します。

C++ や PHP などのプログラミング言語では :: を、C# や Java などでは . を使って表現されます。

C++ の場合 🔗

C++ では :: を使って表現します。

たとえば、名前空間やクラスの静的メンバを使用するとき、名前空間名::識別子クラス名::識別子 のように記述します。また、グローバルスコープを指定する場合には ::識別子 のように記述します。こうした使い方は、スコープを明示しなくても曖昧にならないケースでは不要ですが、あえて使用することもできます。

#include <iostream>

int x {100};

namespace N {
    int x {1};
}

struct S {
    static int v;
};
int S::v {42};

int main()
{
    std::cout << "N::x = " << N::x << "\n";
    std::cout << "S::v = " << S::v << "\n";
    std::cout << "::x = " << ::x << "\n";
}

詳細は、新C++編「スコープと名前空間」を参照してください。

scoped enum列挙子を使用するときにもスコープ解決演算子を用いて、列挙型名::列挙名 のようにします。こちらの使い方は C++20 よりも前では必須でしたが、C++20 以降では using enum宣言を行うことで省略できるようになりました[1]

enum class Color {
    Red,
    Blue,
    Green,
};

Color c {Color::Red};

// C++20 以降
using enum Color;  // using enum 宣言
auto d = Red; // OK

詳細は、新C++編「列挙型」を参照してください。

参考リンク 🔗

更新履歴 🔗


用語集のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Facebook でシェア X で ポストフォロー
LINE で送る noteで書く rss1.0 取得ボタン RSS
管理者情報 プライバシーポリシー
先頭へ戻る