Jakie jest to wyrażenie „buźka z brodą”: „<:] {%>”?

300

Natknąłem się na następujący program, który kompiluje się bez błędów, a nawet ostrzeżeń:

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

Przykład na żywo.

Co robi program i jakie jest to wyrażenie buźki?

Xeo
źródło
44
Jako bonus dałem coś w tym kierunku klasie programistycznej. Jestem zły, wiem. Jest bardzo nie do przeszukiwania w Google.
Chris
57
Niezłe obrzezanie; Słyszę, że pozywają cię za powiedzenie „nie do przeszukiwania”.
mat
3
@matt Pozwały Szwecji: bbc.com/news/magazine-21956743
Edward
2
Czy możesz rozważyć zmianę zaakceptowanej odpowiedzi?
nhahtdh
4
@Mysticial: Zabawne odpowiedzi są zabawne, ale pod koniec dnia tak naprawdę nie pomagają czytelnikom.
nhahtdh

Odpowiedzi:

292

To pusta lambda z przebraniem digrafa. Normalne lambdy nie mają brody.

R. Martinho Fernandes
źródło
354

Program wykorzystuje digraphy do reprezentowania następujących elementów:

[] {};

To wyrażenie lambda, które nic nie robi. Odpowiednie symbole mają następujące odpowiedniki:

<: = [
%> = }

Mimo że są one dziś na ogół niepotrzebne, digraphy są przydatne, gdy na klawiaturze brakuje pewnych klawiszy niezbędnych do korzystania z podstawowego źródłowego zestawu znaków C ++, a mianowicie graficznych. Kombinacja znaków tworzących wykrój jest przetwarzana jako pojedynczy token. To z kolei uzupełnia niewystarczająco wyposażone klawiatury lub inny sprzęt lub oprogramowanie.

0x499602D2
źródło
66

Program wykorzystuje digraphy , które umożliwiają programowanie w C ++ za pomocą klawiatury (lub kodowania tekstu), które mogą nie mieć znaków, których zwykle używa C ++.

Kod rozwiązuje to:

int main(){
  []{}; // smile!
}
Drew Dormann
źródło
61
int main(){
  <:]{%>; // smile!
}

Zasadniczo jest to wyrażenie Lambda ( wyrażenie Lambda jest jedną z funkcji C ++ 11 ) za pomocą digraphów (zarówno digraphs, jak i trigrafów działa na C ++):

[] {};

Używając tylko digrafów:

<:]<%}; 

<:]<%%>;

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

[:><%};

[:><%%>;

Mieszanie ich z Trigraphs:

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

??(:>{??>; // pirate
Khaled.K
źródło