Dabei bin ich auf folgendes Programm gestoßen, das ohne Fehler oder gar Warnungen kompiliert:
int main(){
<:]{%>; // smile!
}
Was macht das Programm und was ist dieser Smiley-Ausdruck?
Xeo
Dabei bin ich auf folgendes Programm gestoßen, das ohne Fehler oder gar Warnungen kompiliert:
int main(){
<:]{%>; // smile!
}
Was macht das Programm und was ist dieser Smiley-Ausdruck?
David G
Das Programm verwendet Digraphen Folgendes darstellen:
[] {};
Dies ist ein Lambda-Ausdruck, der nichts tut. Die entsprechenden Symbole haben diese Äquivalente:
<:= [
%> = }
Though they are generally unneeded today, digraphs are useful for when your keyboard lacks certain keys necessary to use C++'s basic source character set, namely the graphical ones. The combination of the characters that make up a digraph are processed as a single token. This in turn makes up for any insufficiently-equipped keyboards or other such hardware or software.
That's an empty lambda using a digraph disguise. Normal lambdas don't have beards.
Drew Dormann
The program is using digraphs, which allow C++ programming with keyboards (or text encodings) that may not have the characters C++ typically uses.
The code resolves to this:
int main(){
[]{}; // Lächeln! }
int main(){ <:]{%>; // smile! }
Es ist im Grunde ein Lambda-Ausdruck (Der Lambda-Ausdruck ist einer von C++11 Funktionen) verwenden Digraphen (Sowohl Digraphen als auch Trigraphen funktionieren in C++):
[] {};
Nur Digraphen verwenden:
<:]<%}; <:]<%%>;
[:>{%>; // like my cubic hat?
[:><%};
[:><%%>;
Mixing them with Trigraphs:
<:??)<%??>; // popeye
??(:>{??>; // pirate
Würden Sie bitte in Betracht ziehen, die akzeptierte Antwort zu ändern?
– nhahtdh
16. Dezember 2014 um 12:57 Uhr
@nhahtdh Er kann nicht. Robot (der Autor der akzeptierten Antwort) sagte, er werde seine Antwort löschen. Der springende Punkt, ihm das Häkchen zu geben, besteht darin, ihn daran zu hindern, da wir keine wertvollen Antworten verlieren wollen.
– Mystisch
16. Dezember 2014 um 17:53 Uhr
@Mystcial: Lustige Antworten machen Spaß, aber am Ende des Tages helfen sie den Lesern nicht wirklich.
– nhahtdh
16. Dezember 2014 um 17:56 Uhr
@nhahtdh Die Antwort macht sowohl Spaß als auch beschreibt, was los ist. Die Tatsache, dass es sich um ein leeres Lambda handelt und eine Digraph-Verkleidung hat, sollte ausreichen, um den Lesern genügend Informationen zu liefern. Es hält nicht in der Hand: Die nächste Antwort unten tut es. Händchenhalten ist schön; Das Fehlen derselben bedeutet jedoch nicht, dass das OP seine Antwort ändern sollte, wenn es sie nicht benötigt.
– Yakk – Adam Nevraumont
10. März 2015 um 19:05 Uhr
Bitte bearbeiten Sie den Titel nicht so. Es ist nicht “lang” und wird als Ausdruck verwendet, was ein wichtiger Punkt für die Frage ist (andernfalls hätte es auch in einem Kommentar verwendet werden können).
– Xeo
24. August 2015 um 9:09 Uhr