是否定义了哪种算法可以接受可变的lambda?

时间:2018-10-04 14:45:39

标签: c++ lambda pass-by-value mutable implementation-defined-behavior

我发现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的实现定义的行为。是否有实现定义的其他功能的列表?

1 个答案:

答案 0 :(得分:4)

是的。 参见[algorithms.requirements]:

http://eel.is/c++draft/algorithms#requirements-9

  

[注:除非另有说明,否则将以函数对象作为参数的算法允许自由复制那些函数对象。对于对象身份很重要的程序员,应考虑使用指向未复制的实现对象(例如reference_wrapper或某些等效解决方案)的包装器类。 —尾注]