Natknąłem się na następujący program, który kompiluje się bez błędów, a nawet ostrzeżeń:
int main(){
<:]{%>; // smile!
}
Co robi program i jakie jest to wyrażenie buźki?
Natknąłem się na następujący program, który kompiluje się bez błędów, a nawet ostrzeżeń:
int main(){
<:]{%>; // smile!
}
Co robi program i jakie jest to wyrażenie buźki?
Odpowiedzi:
To pusta lambda z przebraniem digrafa. Normalne lambdy nie mają brody.
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.
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!
}
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