(Diese Antwort ist hauptsächlich für Googler gedacht, da OP sein Problem bereits gelöst hat). Die Bedeutung von prepended ::
- scope resulution operator - wurde bereits in anderen Antworten beschrieben, aber ich möchte hinzufügen, warum die Leute ihn verwenden.
Die Bedeutung ist: "Nimm den Namen aus dem globalen Namespace, nicht aus einem anderen". Aber warum muss das explizit geschrieben werden?
Anwendungsfall - Namensraumkonflikt
Wenn Sie den gleichen Namen im globalen und im lokalen/verschachtelten Namensraum haben, wird der lokale Name verwendet. Wenn Sie also den globalen Namen wollen, stellen Sie ihm folgendes vor ::
. Dieser Fall wurde in der Antwort von @Wyatt Anderson beschrieben, siehe sein Beispiel.
Anwendungsfall - Hervorhebung der Nicht-Mitglieder-Funktion
Wenn Sie eine Mitgliedsfunktion (eine Methode) schreiben, sehen Aufrufe an andere Mitgliedsfunktionen und Aufrufe an Nicht-Mitgliedsfunktionen (freie Funktionen) gleich aus:
class A {
void DoSomething() {
m_counter=0;
...
Twist(data);
...
Bend(data);
...
if(m_counter>0) exit(0);
}
int m_couner;
...
}
Aber es könnte passieren, dass Twist
ist eine Schwesterfunktion der Klasse A
y Bend
ist eine freie Funktion. Das heißt, Twist
verwenden und ändern können m_couner
y Bend
nicht. Wenn Sie also sicherstellen wollen, dass m_counter
0 bleibt, müssen Sie prüfen Twist
aber Sie brauchen nicht zu prüfen Bend
.
Um dies deutlicher zu machen, kann man also entweder schreiben this->Twist
um dem Leser zu zeigen, dass Twist
eine Mitgliedsfunktion ist oder schreiben ::Bend
um zu zeigen, dass Bend
frei ist. Oder beides. Dies ist sehr nützlich, wenn Sie ein Refactoring durchführen oder planen.