การแสดงออกของยิ้มกับเคราคืออะไร:“ <:] {%>”?


300

ฉันเจอโปรแกรมต่อไปนี้ซึ่งรวบรวมได้โดยไม่มีข้อผิดพลาดหรือแม้กระทั่งคำเตือน:

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

ตัวอย่างสด

โปรแกรมทำอะไรและยิ้มนั้นคืออะไร?


44
ฉันมอบบางอย่างตามบรรทัดเหล่านี้ให้กับคลาสการเขียนโปรแกรมเป็นโบนัส ฉันชั่วฉันรู้ Google ไม่สามารถค้นหาได้มากนัก
chris

57
การหลีกเลี่ยงที่ดี; ฉันได้ยินว่าพวกเขาฟ้องคุณว่า "ไม่สามารถใช้งานได้"
ด้าน

3
@matt พวกเขาฟ้อง Sweeden: bbc.com/news/magazine-21956743
Edward

2
คุณช่วยพิจารณาเปลี่ยนคำตอบที่ยอมรับได้ไหม
พฤศจิกายน

4
@Mysticial: คำตอบที่สนุกสนานนั้นสนุก แต่ในตอนท้ายของวันมันไม่ได้ช่วยผู้อ่านได้จริงๆ
พฤศจิกายน

คำตอบ:


292

นั่นคือแลมบ์ดาที่ว่างเปล่าโดยใช้การปลอมตัวแบบกราฟ ลูกแกะปกติไม่มีเครา


354

โปรแกรมใช้digraphsเพื่อแสดงสิ่งต่อไปนี้:

[] {};

นี่คือการแสดงออกแลมบ์ดาที่ไม่ทำอะไรเลย สัญลักษณ์ที่เกี่ยวข้องมีการเทียบเท่าเหล่านี้:

<: = [
%> = }

แม้ว่าโดยทั่วไปแล้วพวกเขาจะไม่จำเป็นในวันนี้ digraphs มีประโยชน์สำหรับเมื่อแป้นพิมพ์ของคุณขาดปุ่มบางอย่างที่จำเป็นในการใช้ชุดอักขระพื้นฐานของ C ++ ซึ่งก็คือกราฟิก การรวมกันของตัวละครที่ประกอบขึ้นเป็นกราฟิคจะถูกประมวลผลเป็นโทเค็นเดียว สิ่งนี้จะทำขึ้นสำหรับคีย์บอร์ดที่มีอุปกรณ์ไม่เพียงพอหรือฮาร์ดแวร์หรือซอฟต์แวร์อื่น ๆ


66

โปรแกรมกำลังใช้digraphsซึ่งอนุญาตให้การเขียนโปรแกรม C ++ พร้อมกับแป้นพิมพ์ (หรือการเข้ารหัสข้อความ) ที่อาจไม่มีอักขระ C ++ โดยทั่วไปใช้

รหัสจะแก้ไขสิ่งนี้:

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

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

โดยทั่วไปแล้วนิพจน์แลมบ์ดา ( นิพจน์แลมบ์ดาเป็นหนึ่งในคุณสมบัติC ++ 11 ) โดยใช้digraphs (ทั้ง digraphs และ trigraphs ทำงานบน C ++):

[] {};

ใช้ digraphs เท่านั้น:

<:]<%}; 

<:]<%%>;

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

[:><%};

[:><%%>;

ผสมกับ Trigraphs:

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

??(:>{??>; // pirate
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.