Quelle est cette expression de sourire à la barbe: "<:] {%>"?


300

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

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

Exemple en direct.

Que fait le programme et quelle est cette expression souriante?


44
J'ai donné quelque chose dans ce sens à un cours de programmation en bonus. Je suis mauvais, je sais. C'est très inaccessible sur Google.
chris

57
Belle circonlocution; J'entends qu'ils vous poursuivent pour avoir dit "intolérable".
mat

3
@matt Ils ont poursuivi sueeden: bbc.com/news/magazine-21956743
Edward

2
Pourriez-vous s'il vous plaît envisager de changer la réponse acceptée?
nhahtdh

4
@Mysticial: Les réponses amusantes sont amusantes, mais en fin de compte, cela n'aide pas vraiment les lecteurs.
nhahtdh

Réponses:



354

Le programme utilise des digraphes pour représenter les éléments suivants:

[] {};

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

<: = [
%> = }

Bien qu'ils soient généralement inutiles aujourd'hui, les digraphes sont utiles lorsque votre clavier n'a pas certaines touches nécessaires pour utiliser le jeu de caractères source de base de C ++, à savoir les graphiques. La combinaison des caractères qui composent un digraphe est traitée comme un seul jeton. Cela compense à son tour les claviers insuffisamment équipés ou tout autre matériel ou logiciel de ce type.


66

Le programme utilise des digraphes , qui permettent la programmation C ++ avec des claviers (ou des encodages de texte) qui peuvent ne pas avoir les caractères que C ++ utilise généralement.

Le code se résout à ceci:

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

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

Il s'agit essentiellement d'une expression Lambda (l' expression Lambda est l'une des fonctionnalités de C ++ 11 ) utilisant des digraphes (les digraphes et les trigraphes fonctionnent en C ++):

[] {};

En utilisant uniquement des digraphes:

<:]<%}; 

<:]<%%>;

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

[:><%};

[:><%%>;

Les mélanger avec des Trigraphs:

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

??(:>{??>; // pirate
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.