2016-11-10 4 views

답변

4

람다는 prvalue를 반환하므로 호출식이 임시 객체이며, 수명이 참조에 바인딩되어 있기 때문에 수명이 연장됩니다.

int f() { return 12; } 

const int& a = f(); 

여기 a는 유형 int과 가치 12의 임시 객체에 바인딩 :

상황은 간단하게 예를 들어, 다음과 완전히 유사하다.

람다의 반환 형식을 지정하지 않으면 반환 형식은 항상 void 또는 개체 형식입니다. 람다가 lvalue 또는 xvalue를 반환하도록하려면 반환 유형을 명시 적으로 지정해야합니다. -> int&, -> auto&, -> decltype(auto)

+1

가능하면 'TBigType'에 이동 생성자를 지정하는 것이 좋습니다. –

+1

@ LightnessRacesinOrbit : Meh. 그것은 어쨌든 복사 생략됩니다. –

+0

나는 완전히 확신하고 싶다. Pre-C++ 17, 이동 생성자입니다. –