¿Cuál es esta expresión de sonrisa con barba: "<:] {%>"?

300

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

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

Ejemplo en vivo.

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

Xeo
fuente
44
Le di algo en esta línea a una clase de programación como un bono. Soy malvado, lo sé. Es muy inescrutable en Google.
Chris
57
Buena circunlocución; Escuché que te demandaron por decir "ingobernable".
mate
3
@matt demandaron a Suecia
Edward
2
¿Podría considerar cambiar la respuesta aceptada?
nhahtdh
44
@Mysticial: Las respuestas divertidas son divertidas, pero al final del día, realmente no ayudan a los lectores.
nhahtdh

Respuestas:

292

Esa es una lambda vacía con un disfraz de dígrafo. Las lambdas normales no tienen barba.

R. Martinho Fernandes
fuente
354

El programa usa dígrafos para representar lo siguiente:

[] {};

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

<: = [
%> = }

Aunque generalmente no son necesarios hoy en día, los dígrafos son útiles para cuando su teclado carece de ciertas teclas necesarias para usar el conjunto de caracteres de origen básico de C ++, es decir, las gráficas. La combinación de los caracteres que forman un dígrafo se procesan como una sola ficha. Esto a su vez compensa los teclados u otro hardware o software insuficientemente equipados.

0x499602D2
fuente
66

El programa está utilizando dígrafos , que permiten la programación en C ++ con teclados (o codificaciones de texto) que pueden no tener los caracteres que C ++ usa típicamente.

El código resuelve esto:

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

Básicamente es una expresión Lambda (la expresión Lambda es una de las características de C ++ 11 ) que usa dígrafos (tanto los dígrafos como los trigrafos funcionan en C ++):

[] {};

Usando solo dígrafos:

<:]<%}; 

<:]<%%>;

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

[:><%};

[:><%%>;

Mezclándolos con Trigraphs:

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

??(:>{??>; // pirate
Khaled.K
fuente