Nu se atribuie o copie după valoare în lambda

Poate cineva să-mi explice de ce nu funcționează ( test este const în blub ). Deoarece codul test este copiat de valoarea pe care o presupun, aș putea să o set, deoarece este functor local.

#include 

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

    return 0;
}

Pentru a face acest lucru, mai întâi trebuie să introduc un nou cod share_ptr , să atribui codul test și apoi să atribuie în mod normal celuilalt shared_ptr . BTW: folosesc clang 3.1

0

1 răspunsuri

Deoarece operatorul () al lui lambdas este const în mod implicit. Trebuie să utilizați cuvântul cheie mutable pentru al face non-const:

auto blub = [test]() mutable {
    test = std::make_shared(false);
};
0
adăugat
Deci, de const vrei să spui că toate valorile captate sunt const - sau doar copia după valoare?
adăugat autor abergmeier, sursa
Ca și în cazul unui obiect de funcție scrisă manual, numai cele capturate prin valoare. Capturile sunt membri ai lambda iar operatorul este declarat ca Result operator() () const;
adăugat autor R. Martinho Fernandes, sursa