当我运行此 C++ 代码时:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> vec = [&] ()
{
cout<<"pre vec.size() = "<< vec.size() <<endl;
vector<int> retval = {};
for(int i = 0; i < 10; ++i)
vec.push_back(i); // I typed "vec", not "retval"
cout<<"vec.size() = "<< vec.size() <<endl;
cout<<"retval.size() = "<< retval.size() <<endl;
return retval;
}();
cout<< vec.size() <<endl;
}
Run Code Online (Sandbox Code Playgroud)
我得到输出:
pre vec.size() = 34354494244
vec.size() = 10
retval.size() = 10
10
Run Code Online (Sandbox Code Playgroud)
在 lambda 内部, vec 似乎首先未初始化(请参阅大小)。为什么 push_backing 不会导致(valgrind)错误? …