Was ist dieser Ausdruck mit Smiley und Bart: "<:] {%>"?


300

Ich bin auf folgendes Programm gestoßen, das ohne Fehler oder Warnungen kompiliert wird:

int main(){
  <:]{%>; // smile!
}

Live Beispiel.

Was macht das Programm und was ist dieser Smiley-Ausdruck?


44
Als Bonus habe ich einer Programmierklasse etwas in diese Richtung gegeben. Ich bin böse, ich weiß. Es ist bei Google sehr unerforschlich.
Chris

57
Schöne Umschreibung; Ich höre, sie verklagen dich, weil du "unaussprechlich" gesagt hast.
Matt

3
@ Matt Sie verklagten Schweden: bbc.com/news/magazine-21956743
Edward

2
Würden Sie bitte in Betracht ziehen, die akzeptierte Antwort zu ändern?
nhahtdh

4
@Mysticial: Lustige Antworten machen Spaß, aber am Ende des Tages hilft es den Lesern nicht wirklich.
nhahtdh

Antworten:



354

Das Programm verwendet Digraphen , um Folgendes darzustellen:

[] {};

Dies ist ein Lambda-Ausdruck, der nichts tut. Die entsprechenden Symbole haben folgende Entsprechungen:

<: = [
%> = }

Obwohl sie heutzutage im Allgemeinen nicht mehr benötigt werden, sind Digraphen nützlich, wenn auf Ihrer Tastatur bestimmte Tasten fehlen, die für die Verwendung des grundlegenden Quellzeichensatzes von C ++ erforderlich sind, nämlich die grafischen. Die Kombination der Zeichen, aus denen ein Digraph besteht, wird als einzelnes Token verarbeitet. Dies gleicht wiederum unzureichend ausgestattete Tastaturen oder andere solche Hardware oder Software aus.


66

Das Programm verwendet Digraphen , die die C ++ - Programmierung mit Tastaturen (oder Textcodierungen) ermöglichen, die möglicherweise nicht die Zeichen enthalten, die C ++ normalerweise verwendet.

Der Code löst sich folgendermaßen auf:

int main(){
  []{}; // smile!
}

61
int main(){
  <:]{%>; // smile!
}

Es handelt sich im Grunde genommen um einen Lambda-Ausdruck (Lambda-Ausdruck ist eine der Funktionen von C ++ 11 ), der Digraphen verwendet (sowohl Digraphen als auch Trigraphen funktionieren unter C ++):

[] {};

Verwenden Sie nur Digraphen:

<:]<%}; 

<:]<%%>;

[:>{%>; // like my cubic hat?

[:><%};

[:><%%>;

Mischen mit Trigraphen:

<:??)<%??>; // popeye

??(:>{??>; // pirate
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.