it-swarm.com.de

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

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

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

Live-Beispiel.

Was macht das Programm und was ist das für ein Smiley-Ausdruck?

296
Xeo

Das ist ein leerer Lambda in einer Digraphenverkleidung. Normale Lambdas haben keinen Bart.

289

Das Programm verwendet Digraphen , um Folgendes darzustellen:

[] {};

Dies ist ein Lambda-Ausdruck, der nichts bewirkt. 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 unzureichend ausgestattete Tastaturen oder andere derartige Hard- oder Software aus.

351
0x499602D2

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

Der Code wird folgendermaßen aufgelöst:

int main(){
  []{}; // smile!
}
64
Drew Dormann
int main(){
  <:]{%>; // smile!
}

Es ist im Grunde ein Lambda-Ausdruck (Lambda-Ausdruck ist eines von C++ 11 Features) mit Digraphen (sowohl Digraphen als auch Trigraphen funktionieren unter C++):

[] {};

Verwenden Sie nur Digraphen:

<:]<%}; 

<:]<%%>;

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

[:><%};

[:><%%>;

Mischen sie mit Trigraphs:

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

??(:>{??>; // pirate
57
Khaled.K