2013-04-01 6 views
286

私は、エラーや警告さえせずにコンパイルし、次のプログラム、出くわした:このスマイリー・アンド・ビアの表現は「<:]{%>」ですか?

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

Live example.

プログラムが何をして、スマイリー表現というものですでしょうか?

+43

私はボーナスとして、プログラミングクラスにこれらの線に沿って何かを与えました。私は悪いです、私は知っています。それはGoogleで非常に発見できません。 – chris

+56

ニースの周回;私は彼らが "ungoogleable"と言ってあなたを訴えたと聞いています。 – matt

+3

@matt彼らはsweedenを訴えました:http://www.bbc.com/news/magazine-21956743 – Edward

答えて

285

これは、有向グラフを使った空のラムダです。通常のラムダにはひげがありません。

346

プログラムは次のことを表現するためにdigraphsを使用しています。

[] {}; 

これは何もしないラムダ式です。彼らは今日、一般的に不要ですけれども

<: = [ 
%> = } 

は、有向グラフはキーボードがC++の基本ソース文字セット、つまりグラフィカルなものを使用するために必要な特定のキーが欠けているときに便利です:対応するシンボルは、これらの同等物を持っています。有向グラフを構成する文字の組み合わせは、単一のトークンとして処理されます。これは、不十分に装備されたキーボードまたは他のそのようなハードウェアまたはソフトウェアを補う。

60

プログラムではdigraphsが使用されています。これにより、C++で一般的に使用されている文字を持たないキーボード(またはテキストエンコード)でのC++プログラミングが可能になります。

コードはこれに解決されます。

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

それは基本的にLambda expressionです(ラムダ式はC++11の特徴の一つである)digraphs(有向グラフとトリグラフの両方がC++で動作)を使用して:

[] {}; 

dig raphs:

トリグラフでそれらを混合
<:]<%}; 

<:]<%%>; 

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

[:><%}; 

[:><%%>; 

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

??(:>{??>; // pirate 
関連する問題