最近,我遇到了以下深奥的代码。
int main(){(([](){})());}
重新格式化,如下所示以使其更具可读性:
int main(){
(([](){})()); // Um... what?!?!
}
但是我无法理解(([](){})())
有效代码的有效性。
- 它看起来不像函数指针语法。
- 这不可能是操作员重载的把戏。代码按原样编译。
Google在这种全符号搜索中并没有太大帮助。但是它可以在Visual Studio 2010中编译,但不输出任何内容。没有错误,也没有警告。因此,它看起来像有效的代码。
在Javascript和C函数指针之外,我从未见过任何如此奇怪的有效代码。
有人可以解释这是如何有效的C ++吗?
@Mysticial-此代码使您感到迷惑,因为它没有用。如果此lambda可以执行某些操作,您将认识到它具有类似于函数指针的语法(与之密切相关)。
—
SChepurin
@Mysticial-“ C ++的6年”-lambdas只是在C ++ 11中添加的,因此一年左右之前没有人有使用它们的经验。
—
皮特·贝克尔
这里的URL很有趣:“ how-is-int-main-valid-c”
—
tckmn 2014年
Don't sweat it. We have int main(){(([](){})());} which is valid C++"
(聊天11月9日)