相关疑难解决方法(0)

const std :: function包装了一个非const运算符()/ 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);
}
Run Code Online (Sandbox Code Playgroud)

在这里,a const std::function能够呼叫非const operator().

输出:

12
Run Code Online (Sandbox Code Playgroud)

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

怎么可能?

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

c++ c++11 std-function

5
推荐指数
1
解决办法
375
查看次数

标签 统计

c++ ×1

c++11 ×1

std-function ×1