gpt4 book ai didi

c++ - 一个 const std::function 包装一个非常量 operator()/mutable lambda

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:23:04 24 4
gpt4 key购买 nike

考虑以下示例:

#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; });

这怎么可能?

const std::function 可以包装可变仿函数是否正常?

最佳答案

Is it normal that a const std::function may wrap a mutable functor?

不幸的是,是的。 std::function::operator() 被无条件地限定为 const 并且不关心包装的 Callable 是否发生了变化。一些论文试图解决这个问题,但据我所知,还没有任何具体的决定:

关于c++ - 一个 const std::function 包装一个非常量 operator()/mutable lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47114936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com