Может кто-нибудь объяснить, почему ссылка стала недействительной после прохождения функции «identity», foo1
? Разве не «адрес» A
передан и отправлен foo1
?Ссылка lvalue стала недействительной после прохождения через функцию идентификации
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;
}
Как проблема линия отличается от:
const A& r = vec[0];
const A& r1 = r;
Я попытался с vs2015, и ваш код работает хорошо. – alangab
@alangab не работал в VS2013. –
Я думал, что лямбда называется «дураком». Это было глупо. –