下面的代码行给出了错误:
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
没有错误
请让我知道为什么我们在第一种情况下会出错?
答案 0 :(得分:2)
复制使用[variable]
语法对lambda可见的变量。除非指定operator()
,否则lambda的const
为mutable
。
std::vector<std::string> strVect;
auto pushToVector = [strVect] () mutable {
strVect.push_back(std::string("Hi"));
};
pushToVector ();
但是,它没有做任何有用的事情,因为它复制了strVect
,push_back
元素,并且从lambda返回后,副本就消失了。