这个lambda失败了,因为我没有捕获变量:
int main()
{
int val = 5;
auto lambda = []{ return val; }; // error: val wasn't captured.
lambda();
}
但为什么 ostream cout 虽然没有捕获?
int main()
{
auto lambda = []{ cout << endl; }; // works
}
答案 0 :(得分: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;
}
,而val
变量是在本地定义的(即在函数/类的范围内)。