簡體   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