Was bewirkt das Voranstellen von "::" für einen Funktionsaufruf in C ++? [Duplikat]

7

Ich habe mir einen Legacy-C ++ - Code angesehen und er hatte so etwas:

%Vor%

Was bedeutet diese Syntax von "::" vor den Funktionsaufrufen? Google-Fu versagt mich.

    
DVK 25.11.2011, 21:43
quelle

6 Antworten

7

Das bedeutet, dass die Funktionen putenv() und tzset() vom Compiler im globalen Namespace nachgeschlagen werden.

Beispiel

%Vor%     
Nasreddine 25.11.2011, 21:48
quelle
7

Auch bekannt als Scope-Auflösungsoperator

  

In C ++ werden die bereits deklarierten Elementfunktionen definiert (in der   Header-Datei mit der Erweiterung .hpp oder der Erweiterung .h) einer bestimmten Klasse.   In der .cpp-Datei kann man die üblichen globalen Funktionen oder die .cpp-Datei definieren   Mitgliedsfunktionen der Klasse. Um zwischen den normalen zu unterscheiden   Funktionen und die Member-Funktionen der Klasse, muss man die verwenden   scope resolution operator (: :) zwischen dem Klassennamen und dem   Mitgliedsfunktionsname, d. h. ship :: foo () wobei ship eine Klasse und foo () ist   ist eine Memberfunktion des Klassenschiffes.

Beispiel aus Wikipedia:

%Vor%     
sll 25.11.2011 21:46
quelle
3

Es gab gestern (+ ein Jahr) eine Diskussion über eine ähnliche Frage. Vielleicht finden Sie hier eine ausführlichere Antwort.

Was bedeutet prepeded double? Doppelpunkt "::"?

    
stanek 25.11.2011 21:48
quelle
2

Das bedeutet: Nachschlagen der Funktion im globalen Namensraum.

    
Karoly Horvath 25.11.2011 21:45
quelle
1

Es wird der spezifisch unqualifizierte Name verwendet (im Gegensatz zu allem, was mit dem using Schlüsselwort importiert wurde).

    
Brian Cain 25.11.2011 21:45
quelle
0

Der :: ist der Scope-Resolution-Operator, er teilt dem Compiler mit, in welchem ​​Umfang er die Funktion finden soll.

Wenn Sie zum Beispiel eine Funktion mit einer lokalen Variablen var haben und eine globale Variable mit demselben Namen haben, können Sie auf den globalen zugreifen, indem Sie den Operator für die Bereichsauflösung voraussetzen:

%Vor%

Die IBM C ++ - Compiler-Dokumentation stellt dies so dar ( Quelle ):

  

Der Operator :: (scope resolution) wird verwendet, um versteckte Namen zu qualifizieren   dass du sie immer noch benutzen kannst. Sie können den unären Bereichsoperator verwenden, wenn a   Namespace-Bereich oder Name des globalen Bereichs wird durch einen expliziten Namen verborgen   Deklaration desselben Namens in einem Block oder einer Klasse.

Dasselbe kann für Methoden innerhalb einer Klasse und Versionen desselben Namens außerhalb geschehen. Wenn Sie auf eine Variable, Funktion oder Klasse in einem bestimmten Namespace zugreifen möchten, können Sie folgendermaßen darauf zugreifen: <namespace>::<variable|function|class>

Eine Sache zu beachten, obwohl es ein Operator ist, ist es nicht einer der Operatoren, die überladen werden können.

    
Tommy Andersen 25.11.2011 21:49
quelle

Tags und Links