O que é essa expressão de sorriso com barba: "<:] {%>"?

300

Me deparei com o seguinte programa, que compila sem erros ou mesmo avisos:

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

Exemplo ao vivo.

O que o programa faz e qual é essa expressão sorridente?

Xeo
fonte
44
Dei algo nesse sentido a uma aula de programação como um bônus. Eu sou mau, eu sei. É muito insondável no Google.
quer
57
Circunlocução agradável; Ouvi dizer que eles o processam por dizer "inominável".
matt
3
@matt Eles processaram a Suécia: bbc.com/news/magazine-21956743
Edward
2
Você poderia alterar a resposta aceita?
N
4
@Mysticial: Respostas divertidas são divertidas, mas no final do dia, isso realmente não ajuda os leitores.
Nhahtdh

Respostas:

292

É um lambda vazio usando um disfarce de dígrafo. Lambdas normais não têm barbas.

R. Martinho Fernandes
fonte
354

O programa usa dígrafos para representar o seguinte:

[] {};

Esta é uma expressão lambda que não faz nada. Os símbolos correspondentes têm estes equivalentes:

<: = [
%> = }

Embora eles geralmente sejam desnecessários hoje em dia, os digrafos são úteis quando o teclado não possui certas teclas necessárias para usar o conjunto de caracteres de origem básico do C ++, ou seja, os gráficos. A combinação dos caracteres que compõem um dígrafo é processada como um único token. Isso, por sua vez, compensa os teclados insuficientemente equipados ou outro tipo de hardware ou software.

0x499602D2
fonte
66

O programa está usando dígitos , que permitem a programação C ++ com teclados (ou codificações de texto) que podem não ter os caracteres que o C ++ normalmente usa.

O código resolve isso:

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

É basicamente uma expressão Lambda (a expressão Lambda é um dos recursos do C ++ 11 ) usando digrafos (ambos os digrafos e trigramas funcionam em C ++):

[] {};

Usando apenas dígrafos:

<:]<%}; 

<:]<%%>;

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

[:><%};

[:><%%>;

Misturando-os com Trigraphs:

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

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