Es kann helfen, darüber nachzudenken, zwischen der "< <" Operatorsyntax und der "Operator < <" Funktionssyntax zu übersetzen. Ihr C++ Beispiel entspricht dieses Bit von C++ Code:
operator<< (operator<< (cout, "Hello World!"), endl);
Das erste, was Sie hier bemerken sollen, ist, dass es eigentlich nicht viel Klugheit überhaupt in cout. Was schlau ist, ist der Operator < < Funktion - speziell die Version des Operators < < Funktion, die ein Stream-Objekt als erstes Argument nimmt (was cout ist, aber auch viele andere Dinge). Oder, noch genauer, der Bereich des Operators < < Funktionen, die ein Stream-Objekt als erstes Argument nehmen, und eine bestimmte Sache als zweites Argument nehmen - es gibt einen für jeden Objekttyp, den Sie in den Cout-Stream einfügen können. Sie können einen der C++ - Tricks auch in dieser Syntax sehen; der Operator < < Funktionen an Stream-Objekten geben immer das Stream-Objekt zurück, das ihnen gegeben wurde, wodurch eine Verkettung dieser Art ermöglicht wird.
Um C++ - Code in Linker und System-ABIs zu setzen, die C-ähnliche Funktionssyntax erwarten, "zerlegen" die meisten C++ - Compiler die Funktionsnamen, um in ihnen den Typ der Argumente zu codieren, die sie haben. (Außerdem ist der "< <" kein gültiger C-ähnlicher Funktionsname.) Wenn Sie sich also die generierte Assembly für dieses Funktions-Bit angesehen haben, würden Sie sehen, dass die Namen der beiden Funktionen lauten voneinander verschieden - sie hätten Suffixe, die die Argumenttypen anzeigen.Man könnte so etwas wie das manuell tun:
operator_lshift__stream__endl(
operator_lshift__stream__string(cout, "Hello World!"), endl);
Und da haben Sie etwas bekam, die Sie in C.
Nicht sicher implementieren könnte, wo auf diesem starten ... Die kurze Antwort ist, dass die C++ Sprache ist so definiert, dass eine Syntax wie diese möglich ist, und die C-Sprache nicht. - Aber Ihre Frage könnte aus dem "Wie schreibe ich einen Compiler für eine C-Erweiterung Sprache?" den ganzen Weg bis "Wie kann ich Iostream-Funktionalität in einer benutzerdefinierten Bibliothek mit C-Stil-Makros für spezielle Syntax duplizieren?" –
@Conspicuous Compiler: Ich weiß was du sagst. Deshalb habe ich es als hypothetisch bezeichnet. Es ist nicht wichtig ... Ich bin nur neugierig. – Kredns
Die meisten C++ - Compiler sind in C oder C++ geschrieben - und nicht in Assembly. –