ฉันเจอโปรแกรมต่อไปนี้ซึ่งรวบรวมได้โดยไม่มีข้อผิดพลาดหรือแม้กระทั่งคำเตือน:
int main(){
<:]{%>; // smile!
}
โปรแกรมทำอะไรและยิ้มนั้นคืออะไร?
ฉันเจอโปรแกรมต่อไปนี้ซึ่งรวบรวมได้โดยไม่มีข้อผิดพลาดหรือแม้กระทั่งคำเตือน:
int main(){
<:]{%>; // smile!
}
โปรแกรมทำอะไรและยิ้มนั้นคืออะไร?
คำตอบ:
นั่นคือแลมบ์ดาที่ว่างเปล่าโดยใช้การปลอมตัวแบบกราฟ ลูกแกะปกติไม่มีเครา
โปรแกรมใช้digraphsเพื่อแสดงสิ่งต่อไปนี้:
[] {};
นี่คือการแสดงออกแลมบ์ดาที่ไม่ทำอะไรเลย สัญลักษณ์ที่เกี่ยวข้องมีการเทียบเท่าเหล่านี้:
<: = [
%> = }
แม้ว่าโดยทั่วไปแล้วพวกเขาจะไม่จำเป็นในวันนี้ digraphs มีประโยชน์สำหรับเมื่อแป้นพิมพ์ของคุณขาดปุ่มบางอย่างที่จำเป็นในการใช้ชุดอักขระพื้นฐานของ C ++ ซึ่งก็คือกราฟิก การรวมกันของตัวละครที่ประกอบขึ้นเป็นกราฟิคจะถูกประมวลผลเป็นโทเค็นเดียว สิ่งนี้จะทำขึ้นสำหรับคีย์บอร์ดที่มีอุปกรณ์ไม่เพียงพอหรือฮาร์ดแวร์หรือซอฟต์แวร์อื่น ๆ
โปรแกรมกำลังใช้digraphsซึ่งอนุญาตให้การเขียนโปรแกรม C ++ พร้อมกับแป้นพิมพ์ (หรือการเข้ารหัสข้อความ) ที่อาจไม่มีอักขระ C ++ โดยทั่วไปใช้
รหัสจะแก้ไขสิ่งนี้:
int main(){
[]{}; // smile!
}
int main(){ <:]{%>; // smile! }
โดยทั่วไปแล้วนิพจน์แลมบ์ดา ( นิพจน์แลมบ์ดาเป็นหนึ่งในคุณสมบัติC ++ 11 ) โดยใช้digraphs (ทั้ง digraphs และ trigraphs ทำงานบน C ++):
[] {};
ใช้ digraphs เท่านั้น:
<:]<%};
<:]<%%>;
[:>{%>; // like my cubic hat?
[:><%};
[:><%%>;
ผสมกับ Trigraphs:
<:??)<%??>; // popeye
??(:>{??>; // pirate