3

有人可以向我解释为什么以下内容不起作用(testconst里面blub)。由于test是按我假设的值复制的,因此我可以设置它,因为它是本地函子。

#include <memory>

int main()
{
    std::shared_ptr<bool> test;
    auto blub = [test]() {
        test = std::make_shared<bool>(false);
    };

    return 0;
}

为了使它工作,首先我必须引入一个新的shared_ptr,分配test,然后我可以正常分配另一个shared_ptr。顺便说一句:我正在使用 clang 3.1

4

1 回答 1

7

因为operator()lambdas 是const默认的。您需要使用mutable关键字使其成为非常量:

auto blub = [test]() mutable {
    test = std::make_shared<bool>(false);
};
于 2012-06-02T21:32:45.500 回答