Perlプログラマー向けC ++

Fortranプログラマーが任意のプログラミング言語でFortranを作成するという古いジョークがあります。



以下は、C ++ 11コンパイラーによってコンパイルされた3行プログラムです。その後、正常に起動して動作します。

int main(){ return !<:]()<%;[=:>(){<:&](){;%>();%>();}; }
      
      







オンラインIDEの

原則として、この行はC ++プログラマーの検出器として使用できます-誰もがすぐにその仕組みを理解できるわけではありません。





この投稿は社会実験として書かれました。 私の観点から、専門家は彼のツールを完全に理解する必要があります。 コードで何が起こっているかを推測した場合は、コメントを書いてください。



陰謀を失わないために、ネタバレの下の説明:
ネタバレ
 int main(){ return ![](){; [=](){ [&](){;}(); }(); }; }
      
      





一部の文字は、ダイグラフに置き換えられます。

有向グラフは、言語の一部であり、ISO C 99 Digraphsの標準です。 C ++の場合、 Trigraphsがあります。 確かに、ほとんどのC ++コンパイラでは、トライグラフはデフォルトで無効になっています。 ただし、有向グラフの有向グラフは含まれます。



これらすべての*-グラフは、7ビットのISO / IEC 646コードページ(1972)がいくつかの文字[、]、{、}、^、〜を国別文字に割り当てたために表示されたため、ソースコードと新しい標準との互換性を確保する必要がありました。 したがって、<:は開き角括弧に相当します。



時間が経ち、21世紀が到来し、誰もがUTF-8を使用し始めましたが、ダイグラフは標準のままでした。 そして、最も嫌なものは、多くのレガシープロジェクトでまだ見つかっています。 古いソースでこれを見ても心配しないでください






All Articles