Mys*_*ial 264 c++ syntax lambda c++11
我最近遇到了以下深奥的代码.
int main(){(([](){})());}
Run Code Online (Sandbox Code Playgroud)
按如下方式重新格式化以使其更具可读性:
int main(){
(([](){})()); // Um... what?!?!
}
Run Code Online (Sandbox Code Playgroud)
但我无法理解如何(([](){})())有效的代码.
谷歌对这种全符号搜索没有多大帮助.但它在Visual Studio 2010中编译并且不输出任何内容.没有错误,也没有警告.所以它看起来像有效的代码.
我从未见过任何在Javascript和C函数指针之外如此奇怪的有效代码.
有人可以解释这是如何有效的C++?
Xeo*_*Xeo 275
代码本质上调用一个空的lambda.
让我们从头开始:[](){}是一个空的lambda表达式.
然后,在C和C++中,你可以将表达式包装在parens中,它们的行为完全相同†就好像没有它们一样,所以这就是lambda周围的第一对parens所做的事情.我们现在在([](){}).
然后,()在第一个包装parens调用(空)lambda之后.我们现在在([](){})()
整个表达再次包裹在parens中,我们得到了(([](){})()).
最后,;结束声明.我们到了(([](){})());.
†有一些角落情况下,至少在C++中,就像T a_var; 有之间的差异decltype(a_var)和decltype((a_var)).
| 归档时间: |
|
| 查看次数: |
14196 次 |
| 最近记录: |