Bu sakallı surat ifadesi nedir: “<:] {%>”?


300

Hatasız ve hatta uyarı olmadan derleyen aşağıdaki programla karşılaştım:

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

Canlı örnek.

Program ne yapar ve bu gülen yüz ifadesi nedir?


44
Bu hatlar boyunca bir programlama sınıfına bonus olarak bir şey verdim. Ben kötüyüm, biliyorum. Google'da çok araştırılamaz.
chris

57
Güzel sünnet; Sana "unutulmaz" dediđin için dava açtýklarýný duydum.
matt

3
@matt İsveçli dava açtılar: bbc.com/news/magazine-21956743
Edward

2
Lütfen kabul edilen cevabı değiştirmeyi düşünür müsünüz?
nhahtdh

4
@Mysticial: Eğlenceli cevaplar eğlencelidir, ancak günün sonunda okuyuculara gerçekten yardımcı olmaz.
nhahtdh

Yanıtlar:



354

Program aşağıdakileri temsil etmek için digraflar kullanır :

[] {};

Bu hiçbir şey yapmayan bir lambda ifadesidir. Karşılık gelen semboller şu eşdeğerlere sahiptir:

<: = [
%> = }

Bugün genellikle gereksiz olsalar da, digrafiler, klavyenizde C ++ 'ın temel kaynak karakter kümesini, yani grafik olanları kullanmak için gerekli bazı tuşlar olmadığında yararlıdır. Bir digrafiyi oluşturan karakterlerin kombinasyonu tek bir jeton olarak işlenir. Bu da, yetersiz donanımlı klavyeleri veya bu tür diğer donanım veya yazılımları telafi eder.


66

Program, C ++ 'ın tipik olarak kullandığı karakterlere sahip olmayan klavyelerle (veya metin kodlarıyla) C ++ programlamasına izin veren digraflar kullanıyor.

Kod şu şekilde çözülür:

int main(){
  []{}; // smile!
}

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

Temel olarak digraph'ları (hem digraflar hem de trigraflar C ++ üzerinde çalışır ) kullanan bir Lambda ifadesi (Lambda ifadesi C ++ 11 özelliklerinden biridir ):

[] {};

Yalnızca digraflar kullanma:

<:]<%}; 

<:]<%%>;

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

[:><%};

[:><%%>;

Bunları Trigraflarla karıştırmak:

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

??(:>{??>; // pirate
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.