Hatasız ve hatta uyarı olmadan derleyen aşağıdaki programla karşılaştım:
int main(){
<:]{%>; // smile!
}
Program ne yapar ve bu gülen yüz ifadesi nedir?
Hatasız ve hatta uyarı olmadan derleyen aşağıdaki programla karşılaştım:
int main(){
<:]{%>; // smile!
}
Program ne yapar ve bu gülen yüz ifadesi nedir?
Yanıtlar:
Bu digraph kılık değiştirmiş boş bir lambda. Normal lambdaların sakalı yoktur.
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.
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!
}
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