Apa ekspresi tersenyum-dengan-janggut ini: "<:] {%>"?

300

Saya menemukan program berikut, yang mengkompilasi tanpa kesalahan atau bahkan peringatan:

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

Contoh langsung.

Apa yang dilakukan program, dan apa itu ekspresi smiley?

Xeo
sumber
44
Saya memberikan sesuatu seperti ini kepada kelas pemrograman sebagai bonus. Saya jahat, saya tahu. Ini sangat tidak dapat ditelusuri di Google.
chris
57
Sunat yang bagus; Saya mendengar mereka menggugat Anda karena mengatakan "ungoogleable".
matt
3
@matt Mereka menggugat sweeden: bbc.com/news/magazine-21956743
Edward
2
Bisakah Anda mempertimbangkan untuk mengubah jawaban yang diterima?
nhahtdh
4
@Mysticial: Jawaban yang menyenangkan itu menyenangkan, tetapi pada akhirnya, itu tidak benar-benar membantu pembaca.
nhahtdh

Jawaban:

292

Itu lambda kosong menggunakan penyamaran digraf. Lambda yang normal tidak memiliki jenggot.

R. Martinho Fernandes
sumber
354

Program ini menggunakan digraf untuk mewakili yang berikut:

[] {};

Ini adalah ekspresi lambda yang tidak melakukan apa-apa. Simbol yang sesuai memiliki persamaan ini:

<: = [
%> = }

Meskipun mereka umumnya tidak dibutuhkan hari ini, digraf berguna untuk saat keyboard Anda tidak memiliki tombol tertentu yang diperlukan untuk menggunakan set karakter sumber dasar C ++, yaitu yang grafis. Kombinasi karakter yang membentuk digraf diproses sebagai token tunggal. Pada gilirannya, ini menggantikan keyboard yang tidak lengkap atau perangkat keras atau perangkat lunak lainnya.

0x499602D2
sumber
66

Program ini menggunakan digraf , yang memungkinkan pemrograman C ++ dengan keyboard (atau penyandian teks) yang mungkin tidak memiliki karakter yang biasanya digunakan C ++.

Kode mengatasi ini:

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

Ini pada dasarnya adalah ekspresi Lambda ( ekspresi Lambda adalah salah satu fitur C ++ 11 ) menggunakan digraf (baik digraf dan trigraph berfungsi pada C ++):

[] {};

Hanya menggunakan digraf:

<:]<%}; 

<:]<%%>;

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

[:><%};

[:><%%>;

Mencampurnya dengan Trigraphs:

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

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