Что это за выражение «смайлик с бородой»: «<:] {%>»?


300

Мне попалась следующая программа, которая компилируется без ошибок и даже предупреждений:

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

Живой пример.

Что делает программа, и что это за выражение смайлика?


44
Я дал что-то в этом роде классу программирования в качестве бонуса. Я злой, я знаю. Это очень непостижимо в Google.
Крис

57
Хорошая обводка; Я слышал, они судятся с тобой за то, что ты сказал "ungoogleable".
матовые

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.