如何“int main(){(([()(){})());}”有效的C + +?

我最近遇到了以下深奥的一段代码。

int main(){(([](){})());} 

重新格式化如下,使其更具可读性:

 int main(){ (([](){})()); // Um... what?!?! } 

但是我不明白怎么(([](){})())是有效的代码。

  • 它看起来不像函数指针语法。
  • 它不能是一些运营商重载的伎俩。 代码按原样编译。

Google对这个全符号search没有什么帮助。 但它在Visual Studio 2010中编译并不输出。 没有错误,也没有警告。 所以它看起来像有效的代码。

我从来没有见过任何有效的代码,这是离奇的Javascript和C函数指针之外 。

有人可以解释这是如何有效的C ++?

代码本质上是调用一个空的lambda。

让我们从头开始: [](){}是一个空的lambdaexpression式 。

然后,在C和C ++中,可以将expression式包装到parens中,并且它们的行为与没有它们时的行为完全相同,这就是lambda周围的第一对parens所做的。 我们现在在([](){})

然后, ()在第一个包装零件调用(空)lambda之后。 我们现在在([](){})()

整个expression式再次包装在parens中,我们得到(([](){})())

最后, 结束声明。 我们到达(([](){})());


至less在C ++中有一些angular落案例,就像T a_var; decltype(a_var)decltype((a_var))之间有区别 。