スコープ解決演算子: ::
スコープ解決演算子 ::
は異なるスコープで使用される識別子を特定し、あいまいさを解消するために使用されます。 スコープの詳細については、「スコープ」を参照してください。
構文
qualified-id
:
nested-name-specifier
template
optunqualified-id
nested-name-specifier
:
::
type-name
::
namespace-name
::
decltype-specifier
::
nested-name-specifier
identifier
::
nested-name-specifier
template
optsimple-template-id
::
unqualified-id
:
identifier
operator-function-id
conversion-function-id
literal-operator-id
~
type-name
~
decltype-specifier
template-id
解説
identifier
は変数、関数、または列挙値になることがあります。
クラスと名前空間の ::
使用
次の例は、スコープ解決演算子を名前空間およびクラスと共に使用する方法を示します。
namespace NamespaceA{
int x;
class ClassA {
public:
int x;
};
}
int main() {
// A namespace name used to disambiguate
NamespaceA::x = 1;
// A class name used to disambiguate
NamespaceA::ClassA a1;
a1.x = 2;
}
スコープ修飾子を持たないスコープ解決演算子はグローバル名前空間を参照します。
namespace NamespaceA{
int x;
}
int x;
int main() {
int x;
// the x in main()
x = 0;
// The x in the global namespace
::x = 1;
// The x in the A namespace
NamespaceA::x = 2;
}
スコープ解決演算子を使用して、メンバーを識別したり、ディレクティブでメンバーの namespace
名前空間を指定する名前空間を using
識別したりすることができます。 下の例では、名前空間 NamespaceC
で ClassB
が宣言されていた場合でも、ClassB
を使用して NamespaceB
を修飾できます。これは、NamespaceB
が using
ディレクティブにより NamespaceC
でノミネートされているからです。
namespace NamespaceB {
class ClassB {
public:
int x;
};
}
namespace NamespaceC{
using namespace NamespaceB;
}
int main() {
NamespaceB::ClassB b_b;
NamespaceC::ClassB c_b;
b_b.x = 3;
c_b.x = 4;
}
スコープ解決演算子のチェーンを使用できます。 次の例で、NamespaceD::NamespaceD1
は入れ子になった名前空間 NamespaceD1
を特定し、NamespaceE::ClassE::ClassE1
は入れ子になったクラス ClassE1
を特定します。
namespace NamespaceD{
namespace NamespaceD1{
int x;
}
}
namespace NamespaceE{
class ClassE{
public:
class ClassE1{
public:
int x;
};
};
}
int main() {
NamespaceD:: NamespaceD1::x = 6;
NamespaceE::ClassE::ClassE1 e1;
e1.x = 7 ;
}
::
は静的メンバーにのみ使用します。
スコープ解決演算子を使用してクラスの静的メンバーを呼び出すことができます。
class ClassG {
public:
static int get_x() { return x;}
static int x;
};
int ClassG::x = 6;
int main() {
int gx1 = ClassG::x;
int gx2 = ClassG::get_x();
}
スコープを持つ列挙型での ::
の使用
次の例のように、スコープ解決演算子をスコープを持つ列挙型列挙体の宣言の値と共に使用することもできます。
enum class EnumA{
First,
Second,
Third
};
int main() {
EnumA enum_value = EnumA::First;
}
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示