这个lambda失败了因为我没有捕获变量:
int main()
{
int val = 5;
auto lambda = []{ return val; }; // error: val wasn't captured.
lambda();
}
Run Code Online (Sandbox Code Playgroud)
但是为什么ostream cout工作虽然它没有被捕获?
int main()
{
auto lambda = []{ cout << endl; }; // works
}
Run Code Online (Sandbox Code Playgroud)
syn*_*gma 13
这是因为std::cout以下列方式定义(在<iostream>标题中):
#include <ios>
#include <streambuf>
#include <istream>
#include <ostream>
namespace std {
extern istream cin;
extern ostream cout;
extern ostream cerr;
extern ostream clog;
extern wistream wcin;
extern wostream wcout;
extern wostream wcerr;
extern wostream wclog;
}
Run Code Online (Sandbox Code Playgroud)
而你的val变量是在本地定义的(即在函数/类的范围内).
| 归档时间: |
|
| 查看次数: |
1026 次 |
| 最近记录: |