What is this smiley-with-beard expression: “<:]{%>”?

会有一股神秘感。 提交于 2019-12-17 02:52:36

问题


I came across the following program, which compiles without errors or even warnings:

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

Live example.

What does the program do, and what is that smiley-expression?


回答1:


That's an empty lambda using a digraph disguise. Normal lambdas don't have beards.




回答2:


The program uses digraphs to represent the following:

[] {};

This is a lambda expression that does nothing. The corresponding symbols have these equivalents:

<: = [
%> = }

Though they are generally unneeded today, digraphs are useful for when your keyboard lacks certain keys necessary to use C++'s basic source character set, namely the graphical ones. The combination of the characters that make up a digraph are processed as a single token. This in turn makes up for any insufficiently-equipped keyboards or other such hardware or software.




回答3:


The program is using digraphs, which allow C++ programming with keyboards (or text encodings) that may not have the characters C++ typically uses.

The code resolves to this:

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



回答4:


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

It's basically a Lambda expression (Lambda expression is one of C++11 features) using digraphs (both digraphs and trigraphs works on C++):

[] {};

Using only digraphs:

<:]<%}; 

<:]<%%>;

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

[:><%};

[:><%%>;

Mixing them with Trigraphs:

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

??(:>{??>; // pirate


来源:https://stackoverflow.com/questions/15736282/what-is-this-smiley-with-beard-expression

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!