我遇到了以下程序,它编译时没有错误甚至是警告:
int main(){
<:]{%>; // smile!
}
Run Code Online (Sandbox Code Playgroud)
程序做了什么,笑脸表达是什么?
在Stack Overflow问题中,在C++ 11中不允许重新定义lambda,为什么?,给出了一个不编译的小程序:
int main() {
auto test = []{};
test = []{};
}
Run Code Online (Sandbox Code Playgroud)
问题得到了回答,一切似乎都很好.然后是Johannes Schaub并做了一个有趣的观察:
如果你
+在第一个lambda之前放置一个,它会神奇地开始工作.
所以我很好奇:为什么以下工作呢?
int main() {
auto test = +[]{}; // Note the unary operator + before the lambda
test = []{};
}
Run Code Online (Sandbox Code Playgroud)
我试着打印笑脸胡子 lambda表情
#include <iostream>
int main() {
std::cout << <:]{%>; // smile!
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但它打印出来了
1
Run Code Online (Sandbox Code Playgroud)
代替.怎么样?