web-dev-qa-db-fra.com

Quelle est cette expression smiley avec barbe: "<:] {%>"?

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

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

Exemple en direct.

Que fait le programme et quelle est cette expression souriante?

296
Xeo

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

289

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.

351
0x499602D2

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!
}
64
Drew Dormann
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
57
Khaled.K