【发布时间】:2012-11-16 04:46:06
【问题描述】:
我最近遇到了以下深奥的代码。
int main(){(([](){})());}
将其重新格式化,使其更具可读性:
int main(){
(([](){})()); // Um... what?!?!
}
但我无法理解(([](){})()) 是有效代码的原因。
- 它看起来不像函数指针语法。
- 这不可能是某种运算符重载技巧。代码按原样编译。
Google 对这种全符号搜索没有太大帮助。但它在 Visual Studio 2010 中编译并且不输出任何内容。没有错误,也没有警告。所以它看起来像有效的代码。
在Javascript 和C function pointers 之外,我从未见过任何如此奇怪的有效代码。
有人可以解释一下这是有效的 C++ 吗?
【问题讨论】:
-
嘿!那是我的。 "
Don't sweat it. We have int main(){(([](){})());} which is valid C++"(11 月 9 日聊天) -
这是一个 c++11 lambda 闭包
-
@Mysticial - 这段代码让你感到迷惑,因为它没用。如果这个 lambda 可以做某事,你会发现它的语法类似于函数指针(与函数指针密切相关)。
-
@Mysticial - “6 年的 C++”—— lambdas 刚刚在 C++11 中添加,所以大约一年前没有人使用过它们。
-
这里的网址很有趣:“how-is-int-main-valid-c”