Je suis tombé sur le programme suivant, qui compile sans erreurs ni avertissements:
int main(){
<:]{%>; // smile!
}
Que fait le programme et quelle est cette expression souriante?
C'est un lambda vide utilisant un déguisement digraphe. Les lambdas normaux n'ont pas de barbe.
Le programme utilise digraphs 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 ne soient généralement plus nécessaires aujourd’hui, les digrammes sont utiles lorsque votre clavier manque de certaines clés nécessaires pour utiliser le jeu de caractères source de base de C++, à savoir les caractères graphiques. La combinaison des caractères constituant un digraphe est traitée comme un simple jeton. Ceci compense à son tour les claviers insuffisamment équipés ou autre matériel ou logiciel de ce type.
Le programme utilise digraphs , 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 résout ceci:
int main(){
[]{}; // smile!
}
int main(){ <:]{%>; // smile! }
Il s'agit essentiellement d'un expression lambda (l'expression lambda est l'une des caractéristiques C++ 11 ) qui utilise digraphs (les digrammes et les trigrammes fonctionnent en C++):
[] {};
En utilisant uniquement des digraphes:
<:]<%};
<:]<%%>;
[:>{%>; // like my cubic hat?
[:><%};
[:><%%>;
Les mélanger avec des trigraphes:
<:??)<%??>; // popeye
??(:>{??>; // pirate