Что это за выражение «смайлик с бородой»: & quot; & lt;:] {% & gt; & quot ;?

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

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

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

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

294

Решение

Это пустая лямбда, использующая маскировку орграфа. Нормальные лямбды не имеют бороды.

288

Другие решения

Программа использует орграфы представлять следующее:

[] {};

Это лямбда-выражение, которое ничего не делает. Соответствующие символы имеют следующие эквиваленты:

<: = [
%> = }

Хотя сегодня они обычно не нужны, орграфы полезны, когда на вашей клавиатуре не хватает определенных клавиш, необходимых для использования основного исходного набора символов C ++, а именно графических. Комбинация символов, составляющих орграф, обрабатывается как один токен. Это, в свою очередь, компенсирует любые недостаточно оснащенные клавиатуры или другое подобное аппаратное или программное обеспечение.

348

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

Код разрешает это:

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

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

Это в основном Лямбда-выражение (Лямбда-выражение является одним из C ++ 11 особенности) с помощью орграфы (и орграфы, и триграфы работают на C ++):

[] {};

Использование только орграфов:

<:]<%};

<:]<%%>;

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

[:><%};

[:><%%>;

Смешивая их с триграфами:

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

??(:>{??>; // pirate
57
По вопросам рекламы [email protected]