Я натрапив на таку програму, яка збирається без помилок чи навіть попереджень:
int main(){
<:]{%>; // smile!
}
Що робить програма, і що це за смайлик?
Я натрапив на таку програму, яка збирається без помилок чи навіть попереджень:
int main(){
<:]{%>; // smile!
}
Що робить програма, і що це за смайлик?
Відповіді:
Це порожня лямбда, використовуючи маскувальну маску. Звичайні лямбдахи не мають бороди.
Програма використовує графіки для представлення наступного:
[] {};
Це лямбда-вираз, який нічого не робить. Відповідні символи мають ці еквіваленти:
<: = [
%> = }
Хоча вони, як правило, непотрібні сьогодні, для фотографій корисні, коли на клавіатурі бракує певних клавіш, необхідних для використання основного набору символів C ++, а саме графічних. Поєднання символів, що складають диграф, обробляються як один маркер. Це, в свою чергу, складає будь-які недостатньо обладнані клавіатури або інше таке обладнання або програмне забезпечення.
Програма використовує графіки , які дозволяють програмувати C ++ за допомогою клавіатур (або текстових кодувань), які можуть не мати символів, які C ++ зазвичай використовує.
Код вирішує це:
int main(){
[]{}; // smile!
}
int main(){ <:]{%>; // smile! }
Це в основному вираз лямбда ( вираз лямбда є однією з особливостей C ++ 11 ) з використанням диграфів (і діаграми, і триграфи працюють на C ++):
[] {};
Використовуючи лише графіки:
<:]<%};
<:]<%%>;
[:>{%>; // like my cubic hat?
[:><%};
[:><%%>;
Змішування їх з триграфами:
<:??)<%??>; // popeye
??(:>{??>; // pirate