将元素推送到lambda函数内的向量时出错

时间:2016-07-01 07:06:11

标签: c++11 lambda

下面的代码行给出了错误:

strVect
  

错误C2663:' std :: vector< _Ty> :: push_back' :2个超载没有法律转换,因为这个'指针

但是当我在lambda中通过引用传递std::vector<std::string> strVect; auto pushToVector = [&strVect] () { strVect.push_back(std::string("Hi")); }; pushToVector (); 时没有错误。

adb pull /data/data/com.yourpackage/databases/yourdb.db

没有错误

请让我知道为什么我们在第一种情况下会出错?

1 个答案:

答案 0 :(得分:2)

复制使用[variable]语法对lambda可见的变量。除非指定operator(),否则lambda的constmutable

std::vector<std::string> strVect;
auto pushToVector = [strVect] () mutable {
    strVect.push_back(std::string("Hi"));
};
pushToVector ();

但是,它没有做任何有用的事情,因为它复制了strVectpush_back元素,并且从lambda返回后,副本就消失了。