この「ひげを生やした笑顔」「<:] {%>」とは何ですか?


300

エラーや警告なしでコンパイルされる次のプログラムに出くわしました。

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

実例。

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


44
私はボーナスとしてこれらの線に沿ってプログラミングクラスに何かを与えました。私は悪だと思います。Googleで検索することはできません。
クリス、2013

57
素敵な割礼。彼らが「グーグル不可能」と言ってあなたを訴えると聞きました。
マット2013

3
@matt彼らはスウィーデンを訴えた:bbc.com/news/magazine-21956743
Edward

2
受け入れられた回答を変更することを検討していただけますか?
nhahtdh 14

4
@Mysticial:楽しい答えは楽しいですが、結局のところ、それは読者を実際には助けません。
nhahtdh 2014

回答:



354

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

[] {};

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

<: = [
%> = }

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


66

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

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

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

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

これは基本的に、ダイグラフを使用したラムダ式です(ラムダ式はC ++ 11機能の1つです)(ダイグラフとトリグラフの両方がC ++で動作します)。

[] {};

有向グラフのみを使用:

<:]<%}; 

<:]<%%>;

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

[:><%};

[:><%%>;

それらをTrigraphsと混合する:

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

??(:>{??>; // pirate
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.