为什么使用lambda时此代码出错?

问题描述 投票:0回答:2

错误是:

参数4从'const ServerLogInfo'到'ServerLogInfo&'的未知转换

int AsyncParseInternal(const std::string& data, DictEntry* entries, int num_dense, ServerLogInfo& serverlog, time_t timestamp)
{
    auto func = [this, data, entries, num_dense, serverlog, timestamp]() {
        this->ParseInternal(data, entries, num_dense, serverlog, timestamp);
    };
    util::ThreadCaller::call_method(std::move(func));
    return 0;
}

int ParseInternal(
    const std::string& data, DictEntry* entries, int num_dense, ServerLogInfo& serverlog, time_t timestamp)
{
    ...
}
c++ lambda func ref
2个回答
0
投票
考虑:

void f(int&) {} struct S { void operator()() const { f(x); } int x; };

由于operator()被标记为const,因此无法编译。 C ++ lambda是带有operator()且隐式标记为const的函数对象。

为了获得非const operator(),您需要标记λmutable。即,

auto func = [...]() mutable { ... }; ^^^^^^^


0
投票
捕获的对象无法在lambda中修改,其operator()const限定,并且捕获的对象也被视为const;那么您不能将它们传递给像ServerLogInfo&这样的非const的左值引用,除非用mutable声明lambda。
© www.soinside.com 2019 - 2024. All rights reserved.