最近、次の難解なコードに出くわしました。
int main(){(([](){})());}
次のように再フォーマットして、読みやすくします。
int main(){
(([](){})()); // Um... what?!?!
}
しかし、私(([](){})())
は有効なコードがどうあるかについて頭をつかむことができません。
- 関数ポインタ構文のようには見えません。
- オペレーターのオーバーロードのトリックにはなりません。コードはそのままコンパイルされます。
グーグルは、この全記号検索ではあまり役に立たなかった。ただし、Visual Studio 2010でコンパイルされ、何も出力されません。エラーも警告もありませんでした。したがって、有効なコードのように見えます。
私は、JavaScriptとC関数ポインター以外ではとても奇妙な有効なコードを見たことがありません。
これが有効なC ++であると誰かが説明できますか?
@Mysticial-役に立たないため、このコードはあなたを不可解にします。このラムダが何かを実行する場合、関数ポインタ(これは密接に関連している)に類似した構文を持っていることがわかります。
—
シェプリン
@Mysticial-「6年間のC ++」-ラムダはC ++ 11で追加されたばかりなので、1年ほど前に誰もそれらの経験はありません。
—
ピートベッカー
ここのURLはかなりおもしろい: "how-is-int-main-valid-c"
—
tckmn
Don't sweat it. We have int main(){(([](){})());} which is valid C++"
(11月9日のチャット)