繁体   English   中英

const std :: function包装了一个非const运算符()/ mutable lambda

[英]A const std::function wraps a non-const operator() / mutable lambda

请考虑以下示例:

#include <iostream>
#include <functional>

struct A
{
    int i;
    void operator()() 
    {
        std::cout << ++i;
    }
};

void test(std::function<void()> const& fun)
{
    fun();
}

int main() {
    const std::function<void()> f{A{}};
    test(f);
    test(f);
}

这里, const std::function能够调用非const operator()

输出:

12

如果我提供一个mutable lambda例如test([x = 0]() mutable { ++x; });也会发生同样的情况test([x = 0]() mutable { ++x; });

怎么可能?

const std::function可以包装一个可变的函子是正常的吗?

const std::function可以包装一个可变的函子是正常的吗?

不幸的是,是的。 std::function::operator()无条件地限定为const ,并不关心包装的Callable是否发生变异。 一些文章试图解决这个问题,但AFAIK没有具体的决定:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM