305 votes

Quelle est cette expression smiley-with-beard: "<:] {%>"?

Je suis tombé sur le programme suivant, qui compile sans erreurs ou même avertissements:

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

Exemple en direct.

Que fait le programme, et quelle est cette expression souriante?

360voto

0x499602D2 Points 36421

Le programme utilise des bigrammes pour représenter les suivantes:

[] {};

C'est une expression lambda qui ne fait rien. Les symboles correspondants ont ces équivalents:

<: = [
%> = }

Si elles sont généralement inutiles aujourd'hui, bigrammes sont utiles lorsque votre clavier manque de certaines clés nécessaires à l'utilisation de C++de base de la source de jeu de caractères, à savoir le graphique. La combinaison des caractères qui composent un digraphe sont traitées comme un seul jeton. Ce à son tour, fait insuffisamment équipés de claviers ou d'autres matériels ou logiciels.

297voto

R. Martinho Fernandes Points 96873

C'est un lambda vide utilisant un déguisement digraph. Les lambdas normaux n'ont pas de barbe.

68voto

Drew Dormann Points 25025

Le programme utilise des digrammes , qui permettent la programmation en C ++ avec des claviers qui ne possèdent pas les clés requises par C ++.

Le code résout à ceci:

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

62voto

Khaled A Khunaifer Points 2332
int main(){
  <:]{%>; // smile!
}

C'est essentiellement une expression Lambda (Lambda expression est l'un de C++11 fonctions) à l'aide de bigrammes (les deux digraphes et trigraphs fonctionne sur le C++):

[] {};

En utilisant uniquement des bigrammes:

<:]<%}; 

<:]<%%>;

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

[:><%};

[:><%%>;

Les mélanger avec Trigraphs:

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

??(:>{??>; // pirate

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X