我发现here是通过值捕获的lambda。这意味着,如果算法内部使用第二个按值接受λ的算法,则不会保留λ的任何可变状态。我将在此处重新发布我的链接问题示例:
remove_if(begin(values), end(values), [i = 0U, it = cbegin(intervals), end = cend(intervals)](const auto&) mutable {
return it != end && ++i > it->first && (i <= it->second || (++it, true));
})
因此,在撰写本文时,我的原始问题remove_if
具有mutable
lambda的实现定义的行为。是否有实现定义的其他功能的列表?
答案 0 :(得分:4)
是的。 参见[algorithms.requirements]:
http://eel.is/c++draft/algorithms#requirements-9
[注:除非另有说明,否则将以函数对象作为参数的算法允许自由复制那些函数对象。对于对象身份很重要的程序员,应考虑使用指向未复制的实现对象(例如reference_wrapper或某些等效解决方案)的包装器类。 —尾注]