[英]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.