我有一小段涉及 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));
然后错误消失了。我对此很好,但我不完全知道发生了什么。我知道我没有明确指定 bool 返回值(并且通过这个更改的代码,我是),但我认为如果 lambda 中只有一行,我不需要这样做。另外,我不知道 [&] 在做什么。
最佳答案
这是一个 IntelliSense 错误;它已在 Visual Studio 2013 中修复。您可以忽略错误的错误。
关于c++ - VS Express 2012 C++ lambda Intellisense 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20959119/