小编use*_*014的帖子

立即计算的 lambda 的 C++ 范围规则

当我运行此 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)错误? …

c++ lambda

6
推荐指数
2
解决办法
133
查看次数

标签 统计

c++ ×1

lambda ×1