c++ expression emoticons digraphs

c++ - ¿Qué es esta expresión de sonriente con barba: “<:]{%>”?



expression emoticons (4)

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

Básicamente es una expresión Lambda (la expresión Lambda es una de las características de C++11 ) que utiliza digraphs (tanto los gráficos como los trigraphs funcionan en C ++):

[] {};

Usando solo digrafos:

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

Mezclando con Trigraphs:

<:??)<%??>; // popeye ??(:>{??>; // pirate

Me encontré con el siguiente programa, que compila sin errores ni advertencias:

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

Ejemplo vivo.

¿Qué hace el programa y qué es esa expresión sonriente?


El programa utiliza digraphs , que permiten la programación en C ++ con teclados (o codificaciones de texto) que pueden no tener los caracteres que normalmente usa C ++.

El código resuelve esto:

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


El programa utiliza digraphs para representar lo siguiente:

[] {};

Esta es una expresión lambda que no hace nada. Los símbolos correspondientes tienen estos equivalentes:

<: = [ %> = }

Aunque en general no son necesarios hoy en día, los dígrafos son útiles para cuando su teclado carece de ciertas teclas necesarias para usar el juego de caracteres fuente básico de C ++, es decir, los gráficos. La combinación de los caracteres que forman un dígrafo se procesa como un token único. Esto a su vez compensa cualquier teclado insuficientemente equipado u otro tipo de hardware o software.


Es una lambda vacía usando un disfraz de dígrafo. Las lambdas normales no tienen barba.