2009-05-21 7 views
4

Ich sah einmal diese Codezeile:Was bedeutet "% lt" in C++? (NICHT Modul, ich weiß, was das bedeutet)

std::cout %lt;%lt; "Hello world!" %lt;%lt; std:: endl; 

und frage mich, was %lt;%lt; Mittel.

+1

ich den ‚c‘ Tag seit cout entfernt und << gilt nicht wirklich C. –

+1

Bonuspunkte, wenn jemand kann kommen eine Möglichkeit, diese Kompilierung durchzuführen, zusätzliche Punkte, wenn das Literal gedruckt wird. Kann nicht sehen, wie der Operator% überladen wird. – MSalters

+0

Sie können den Operator% überladen, aber diese Kompilierung würde einen * unary * Operator% erfordern, was nicht erlaubt ist. – dan04

Antwort

33

Sie müssen diese online gesehen haben. Jemand hochgeladen diese Zeile:

std::cout << "Hello world!" << std::endl; 

, die zu dieser für die Ausgabe in HTML übersetzt wurde:

std::cout &lt;&lt; "Hello world!" &lt;&lt; std::endl; 

Denn natürlich &lt; ist die HTML-Entität für <.

Schließlich entschied sich irgendwo irgendwo, die Ampersands in Prozentzeichen zu ändern, möglicherweise als Teil eines URL-Codierungsschemas.

+0

Eh ... klingt etwas plausibler als meine Idee. Ich werde meine entfernen und auf Ihre wilde Vermutung verschieben. ;-) – Shog9

+0

Lustig: Ich dachte daran, dieses zu löschen, weil es im Wesentlichen das gleiche wie die anderen beiden ist. Die Hauptsache ist die < zu

+0

Deutlich durchdachter als mein Eilauftrag - verliere ich meine Punkte, wenn ich meine entferne? –

30

Sieht aus wie "% lt;" soll für HTTP-Übertragung entkommen sein. Wie:

%lt;%lt; 

sein sollte:

<< 
1

Mein erster Gedanke war, dass Sie vielleicht Code gesehen haben, der C trigraphs verwendet. Es scheint jedoch keine Trigraph für < oder > zu geben.

Die C trigraphs und ihr Ein-Zeichen-Äquivalente:

??= # 
??/ \ 
??'^
??( [ 
??) ] 
??! | 
??< { 
??> } 
??- ~ 
+0

Aber Digraphen enthalten Prozentzeichen (einschließlich <% and %>). Leider gibt es keinen Digraph, der ein Prozentzeichen und Buchstaben verwendet. –