いくつかのプログラミング言語に存在する演算子の一種で、識別子がどのスコープにあるものかを明示的に指定するために使用されます。
たとえば同名の識別子(変数名や関数名など)が複数のスコープ(名前空間やクラスなど)に存在する場合、いま使おうとしている識別子がどのスコープに属しているものであるかを明確にしなければなりません。このようなときにスコープ解決演算子を使用します。
C++ や PHP などのプログラミング言語では ::
を、C# や Java などでは .
を使って表現されます。
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::Red};
Color c
// C++20 以降
using enum Color; // using enum 宣言
auto d = Red; // OK
詳細は、新C++編「列挙型」を参照してください。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Facebook でシェア | X で ポスト/フォロー |
LINE で送る | noteで書く |
![]() |
管理者情報 | プライバシーポリシー |