2016-05-13 5 views
0

Kürzlich habe ich "Intro to C++" Videos angeschaut, von denen einige bestimmte Konzepte besser erklären als andere. Es gibt jedoch etwas, was keines der Videos angesprochen hat, und das ist die Bedeutung der Karotte Klammern.Was machen Karotten Klammern in C++?

Ex:

int main(){ 

    cout << "Hello World" << endl; 
    return 0; 

} 

Ich bin nur daran interessiert, in der ersten Zeile der obigen Funktion. Wenn ich richtig verstehe, druckt cout die folgende Variable oder den folgenden Wert, während endl das Ende der Zeile angibt und "\n" darstellt.

Ich habe C++ Operatoren und Schlüsselwörter gegoogelt, und dies scheint in den Listen der weder, obwohl < < offenbar auch als binärer linken Shift-Operator dient ...

I Um zu klären, bin von einem Python komme/Java-Hintergrund, so würde ich ein Komma oder ein Zusatzzeichen erwarten. Ich möchte wissen, ob < < ist das Äquivalent von diesen oder etwas Ähnliches, aber anders.

Danke.

+1

Google: Operator überlastet. –

+0

<< ist überladen, um auch als Konsolenausgabeoperator zu dienen. –

+6

Sind diese _really_ _carrot_ (?!) Klammern? – ForceBru

Antwort

4

im semantischen Kontext von Strömen wird << die „stream-Operator“ genannt und >> wird der „Strom-Operator. Syntaktisch sie sind die gleichen wie die linke und rechte Verschiebungsoperatoren, die semantisch arbeiten auf ganze Zahlen bezeichnet.

aus dem Kontext von Java, sollten Sie mit diesem mit dem + Operator vertraut sein, die unterschiedlich in Abhängigkeit davon wirkt, ob seine Argumente sind ints, Schwimmern oder Strings (obwohl C++ allgemeinen Überlastung erlaubt).

std::endl unterscheidet sich von '\n' in dem es auch die Strae spült m (Beachten Sie, dass std::cout standardmäßig in der Zeile gepuffert ist, wenn es zu einem Terminal geht).

Mit einem + für die Ausgabe bedeutet, dass eine Reihe von unnötigen temporären Strings erstellt werden würde, und eine Überlastung , (wie && oder ||) wäre überraschend, da die eingebaute Bedeutung verstecken würde.

Wenn variadic Vorlagen verfügbar gewesen wären, wenn C++ in seinen frühen Stadien war, hätte es wahrscheinlich <<, aber eine Mitgliedsfunktion nicht verwendet.

+0

Danke, dass du deine Antwort an Java gebunden hast, es war sehr hilfreich. Ist "Flushes the Stream" Speicherverwaltungsterminologie? –

+1

@KarlaMiletti Nein. Streams sind Objekte, die zum Lesen und/oder Schreiben von Objekten verwendet werden können. 'std :: cout' ist ein Beispiel für einen Ausgabestream. Aus Leistungsgründen werden Daten, die Sie in einen Stream eingeben, nicht sofort auf dem Bildschirm (oder der Datei für Dateiströme) ausgegeben. Stattdessen wird es von Zeit zu Zeit in großen Blöcken ausgegeben. Eine solche Ausgabe eines Datenblocks wird als * flushing * bezeichnet. – HolyBlackCat

+0

Großartig, danke! –

4

C++ ermöglicht eine Überlastung des Bedieners, so dass sich die Bedeutung von << abhängig von den betroffenen Typen ändert. cout ist vom Typ ostream, der << überlädt, um in den Stream zu schreiben.

Here is a listing of many of them Beachten Sie, dass es keine vollständige Liste ist, da Sie Operatoren außerhalb der ostream-Klasse wie in this example on MSDN of a Date definiert haben können.

+0

Danke für diese Liste! Ich werde das überprüfen. –

6

Diese sind nicht "Karotte Klammern". << ist Links-Bitshift-Operator und nichts mehr.

Sie können Zeug unter Verwendung << drucken, da C++ Sie ändern können, wie sich Operatoren mit bestimmten Klassen verhalten. Dies wird Operator Überladung genannt. << ist überladen für std::cout, um sich als eine Druckfunktion zu verhalten.

+0

Danke! Ist das der einzige Operator, der auf diese Weise überlastet ist? –

+1

@KarlaMiletti Soweit ich weiß, für 'cout' - ja. Einige der anderen Klassen haben unterschiedliche benutzerdefinierte Operatoren. Zum Beispiel können Sie '>>' auf 'std :: cin' verwenden, um Daten in Variablen zu lesen. – HolyBlackCat

+1

@KarlaMiletti Nein, ist es nicht. '+' ist für 'std :: string' überladen, um eine Verkettung anstelle eines Zusatzes auszuführen. – Barmar

Verwandte Themen