2010-07-24 24 views
5

Im folgenden Beispiel, was genau macht der Operator <<? Ich vermute, es ist kein bitweiser Operator.Was macht der Operator << in C++?

std::cout << "Mouse down @ " << event.getPos() << std::endl; 

Ich verstehe, was der Code hier tun: Verwenden Sie Standard aus, diesen Text senden, ein Ende der Leitung senden. Nur bin ich nie über die Verwendung dieses < < abgesehen von der rohen Binärdatei gekommen.

Ich beginne mit C++. Und als Betreiber ist es schwer, nach einer Beschreibung dafür zu suchen und was es bedeutet. Kann mich jemand aufklären und/oder mir einen Hinweis geben, wofür man googeln soll?

Dank Ross

+0

Sie liegen falsch, weil es das @ nicht ersetzen wird. – Puppy

Antwort

11

Die Antwort ist: Der Operator << macht Linksverschiebungen standardmäßig für integrierte Typen, aber es kann überlastet werden, um zu tun, was auch immer Sie wollen!

Diese Syntax zum Pipettieren von Strings in einen Stream wurde zuerst (glaube ich) in C++ - Erfinder Bjarne Stroustroups gleichnamigem Buch The C++ Programming Language demonstriert. Persönlich habe ich das Gefühl, dass die Neudefinition eines Operators, um IO zu machen, ein Gimmick ist; es sorgt für cool aussehenden Demo-Code, trägt aber nicht dazu bei, Code verständlich zu machen. Das Überladen von Operatoren als eine Technik wurde in der Programmiersprachengemeinschaft weithin kritisiert.


EDIT: Da sonst niemand dies noch erwähnt hat:

operator<< in der ostream Klasse definiert ist, von denen cout eine Instanz ist. Die Klassendefinition befindet sich in der iostream library, die #include ist als <iostream>.

+0

Ich denke, es ist ein großartiges Werkzeug, genau zu sagen, was Sie in Ihrem Code wollen, und sehr nützlich, wenn Sie stringstreams und fstreams für Piping Daten in etwas verwenden – rubenvb

+0

Eigentlich, wenn Sie pedantisch sein wollen, ist 'Operator <<' eine freie Funktion mit ein "ostream" als erstes Argument. –

+0

@Billy ONeal: Sicher bist du eher ein Experte als ich, aber ist es nicht eine Instanzmethode der 'Ostream' Klasse, mit (was auch immer rechts ist) als erstes Argument? –

-4

Es ist ein "bitweise Verschiebung nach links" Operator.

n < < p

verschiebt die Bits von p n Positionen links. Null-Bits werden in die Positionen niedriger Ordnung verschoben. 3 < < 2 12.

Im Zusammenhang mit der Frage, es ist etwas in ‚cout‘ drückt, die die aktuelle Ausgangsstrom ist.

+0

-1 Nicht in diesem Zusammenhang ... –

+0

@Nick Brooks: Ich habe deine letzte Zeile bearbeitet, um es etwas klarer zu machen, aber es ist wahrscheinlich zu spät, um deine Antwort vor dem Hass zu retten, den sie bekommt. –

3

Dies wird manchmal als "Stream Insertion Operator" bezeichnet, und dies ist die häufigste Verwendung: Daten in einen Stream einfügen. Manchmal habe ich jedoch gesehen, dass es überladen ist, Daten in andere Objekte einzufügen, wenn es beispielsweise um Serialisierung geht.

3

Wie alle Operatoren in C++, < < macht Operationen. Überladen, mit einem ostream linken Operanden (std :: cout ist vom ostream-Typ), wird es als Stream-Operator verwendet, um Daten verschiedener Typen zu drucken. Zum Beispiel können Sie tun

int x = 10; 
std::string y = " something"; 
std::cout << x << y << std::endl; 

Dies wird Ausgang „10 etwas“.

@ wird in diesem Kontext durch nichts ersetzt. Operator < < nur das Ergebnis ausgeben.

std :: endl ist nicht nur das Ende der Zeile, es spült auch das Ergebnis zum Ausgabegerät.

+0

danke für die Markierung das '@' & std :: endl auch. – Ross

1

versuchen, ein Programm zu schreiben, wo Sie ein Objekt erstellen, und rufen Sie den überladenen < < Operator,

class x { 
    //declare some pvt variables 
    //overload << operator 
}; 

int main() { 
    x obj; 
    cout << obj; 
} 

Dadurch werden Sie die Gründe verstehen, die folgende Anweisung

cout << string_var << int_var; 

Sie können hinter der Verwendung Nehmen Sie 'string' und 'int' als Klassen an, die den Operator < < überladen haben, obwohl dies nicht der Fall ist.