Що це за посмішка з бородою: "<:] {%>"?


300

Я натрапив на таку програму, яка збирається без помилок чи навіть попереджень:

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

Живий приклад.

Що робить програма, і що це за смайлик?


44
Я віддав щось у цьому напрямку класу програмування як бонус. Я зла, я знаю. Це дуже недоступно для пошуку в Google.
chris

57
Приємне кругообіг; Я чую, що вони пред'являють вам позов за те, що ви сказали "непридатний".
мат

3
@matt Вони подали до суду на позов: bbc.com/news/magazine-21956743
Едвард

2
Чи можете ви змінити прийняту відповідь?
nhahtdh

4
@Mysticial: Веселі відповіді - це цікаво, але наприкінці дня це не дуже допомагає читачам.
nhahtdh

Відповіді:



354

Програма використовує графіки для представлення наступного:

[] {};

Це лямбда-вираз, який нічого не робить. Відповідні символи мають ці еквіваленти:

<: = [
%> = }

Хоча вони, як правило, непотрібні сьогодні, для фотографій корисні, коли на клавіатурі бракує певних клавіш, необхідних для використання основного набору символів C ++, а саме графічних. Поєднання символів, що складають диграф, обробляються як один маркер. Це, в свою чергу, складає будь-які недостатньо обладнані клавіатури або інше таке обладнання або програмне забезпечення.


66

Програма використовує графіки , які дозволяють програмувати C ++ за допомогою клавіатур (або текстових кодувань), які можуть не мати символів, які C ++ зазвичай використовує.

Код вирішує це:

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

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

Це в основному вираз лямбда ( вираз лямбда є однією з особливостей C ++ 11 ) з використанням диграфів (і діаграми, і триграфи працюють на C ++):

[] {};

Використовуючи лише графіки:

<:]<%}; 

<:]<%%>;

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

[:><%};

[:><%%>;

Змішування їх з триграфами:

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

??(:>{??>; // pirate
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.