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