1
我有涉及,编译罚款拉姆达一小段程式码,但智能感知抛出一个错误。VS Express 2012 C++ lambda Intellisense错误?
items.erase(remove_if(begin(items), end(items),
[](const Item& mItem){ return mItem.booleanMember; }),
end(items));
的错误是
IntelliSense: more than one conversion function from "lambda []bool (const Item &mItem)->bool" to "<error-type>" applies:
function "lambda []bool (const Item &mItem)->bool::operator bool (*)(const Item &mItem)() const"
function "lambda []bool (const Item &mItem)->bool::operator bool (*)(const Item &mItem)() const"
function "lambda []bool (const Item &mItem)->bool::operator bool (*)(const Item &mItem)() const"
如果我更改代码以
items.erase(remove_if(begin(items), end(items),
[&](const Item& mItem)->bool{ return mItem.booleanMember; }),
end(items));
然后错误消失。我会很好,但我不完全知道发生了什么。我知道我没有明确指定一个布尔返回值(以及与此改变的代码,我),但我觉得我没必要,如果有在lambda只有一行。另外,我不知道是什么[&]在做什么。
不,你不需要在这种情况下,显式的返回类型。并且[&]是捕获条款,在许多lambda介绍中进行了解释。 – chris