web-dev-qa-db-ja.com

このひげのスマイリーの表現は何ですか: "<:] {%>"?

エラーや警告なしでコンパイルする次のプログラムに出会いました。

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

実例

プログラムは何をし、そのスマイリー表現とは何ですか?

296
Xeo

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

289

プログラムは digraphs を使用して以下を表します。

[] {};

これは何もしないラムダ式です。対応するシンボルには次の同等物があります。

<: = [
%> = }

今日では一般的に不要ですが、ダイグラフは、C++の基本的なソース文字セット、つまりグラフィカルな文字セットを使用するために必要な特定のキーがキーボードにない場合に役立ちます。有向グラフを構成する文字の組み合わせは、単一のトークンとして処理されます。これは、十分に装備されていないキーボードやその他のハードウェアまたはソフトウェアを補います。

351
0x499602D2

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

コードはこれに解決します:

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

基本的には ラムダ式 (ラムダ式は C++ 11 機能の1つです) digraphs を使用して(ダイグラフとトライグラフの両方がC++で機能します):

[] {};

有向グラフのみを使用する:

<:]<%}; 

<:]<%%>;

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

[:><%};

[:><%%>;

それらをTrigraphsと混合する:

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

??(:>{??>; // pirate
57
Khaled.K