Je suis tombé sur le programme suivant, qui se compile sans erreurs ni même avertissements:
int main(){
<:]{%>; // smile!
}
Que fait le programme et quelle est cette expression souriante?
Je suis tombé sur le programme suivant, qui se compile sans erreurs ni même avertissements:
int main(){
<:]{%>; // smile!
}
Que fait le programme et quelle est cette expression souriante?
Réponses:
C'est un lambda vide utilisant un déguisement digraphique. Les lambdas normaux n'ont pas de barbe.
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.
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!
}
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