Bereichsauflösungsoperator: ::
Der Bereichsauflösungsoperator ::
wird verwendet, um bezeichner zu identifizieren und zu unterscheiden, die in verschiedenen Bereichen verwendet werden. Weitere Informationen zum Bereich finden Sie unter "Bereich".
Syntax
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
Hinweise
identifier
kann eine Variable, eine Funktion oder ein Enumerationswert sein.
Wird für Klassen und Namespaces verwendet ::
Das folgende Beispiel zeigt die Verwendung des Bereichsauflösungsoperators mit Namespaces und Klassen:
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;
}
Ein Bereichsauflösungsoperator ohne Bereichsqualifizierer verweist auf den globalen Namespace.
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;
}
Sie können den Bereichsauflösungsoperator verwenden, um ein Element eines Elements namespace
zu identifizieren oder einen Namespace zu identifizieren, der den Namespace des Elements in einer using
Direktive angibt. Im folgenden Beispiel können Sie verwendenNamespaceC
, um sich zu qualifizierenClassB
, obwohl ClassB
sie im Namespace NamespaceB
deklariert wurde, da NamespaceB
sie von einer using
Direktive nominiert NamespaceC
wurde.
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;
}
Bereichsauflösungsoperatoren können verkettet werden. Im folgenden Beispiel identifiziert NamespaceD::NamespaceD1
den geschachtelten Namespace NamespaceD1
, und NamespaceE::ClassE::ClassE1
identifiziert die geschachtelte Klasse 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 ;
}
Verwendung ::
für statische Member
Sie müssen den Bereichsauflösungsoperator verwenden, um statische Member von Klassen aufzurufen.
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();
}
Wird für bereichsbezogene Enumerationen verwendet ::
Der Operator für die bereichsbezogene Auflösung wird auch mit den Werten einer enumerationsbezogenen Enumerationsdeklaration verwendet, wie im folgenden Beispiel gezeigt:
enum class EnumA{
First,
Second,
Third
};
int main() {
EnumA enum_value = EnumA::First;
}
Siehe auch
Integrierte C++-Operatoren, Rangfolge und Zuordnung
Namespaces
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für