2

我在这里发现 lambdas 是按值捕获的。这意味着如果一个算法在内部使用第二个算法,它按值接受 lambda,则不会保留 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));
})

因此,在撰写本文时,我最初的问题已经定义了lambdaremove_if的实现行为。mutable是否有实现定义的其他功能的列表?

4

1 回答 1

4

是的。见[算法.要求]:

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

[注意:除非另有说明,否则将函数对象作为参数的算法可以自由复制这些函数对象。对象标识对他们来说很重要的程序员应该考虑使用指向非复制实现对象的包装类,例如reference_wrapper,或一些等效的解决方案。——尾注]

于 2018-10-04T14:56:11.513 回答