Czy ktoś mógłby wyjaśnić, dlaczego odwołanie się nieważne po przejściu przez funkcję "tożsamości", foo1
? Czy adres "A
" nie jest przekazywany i zwracany przez foo1
?Odwołanie do lvalue stało się nieprawidłowe po przejściu przez funkcję identyfikacji
struct A {
A(int x) : x_(x) {}
int x_;
};
int main() {
function<const A&(const A& r)> foo1 = [](const A& r) {
return r;
};
vector<A> vec{1, 2, 3};
cout << foo1(vec[0]).x_ << endl; // RUNTIME ERROR
return 0;
}
jaki sposób różnią się od linii Problem:
const A& r = vec[0];
const A& r1 = r;
Próbowałem z vs2015 i kod działa dobrze. – alangab
@alangab nie działał w VS2013. –
Myślałem, że lambda została nazwana "głupcem". To było głupie. –