3
const TBigType& a = [](){
TBigType result;
// ...
return result;
}();
use(a); // by const ref
이렇게 const 참조에서 결과를 캡처해도 괜찮습니까?람다에서 const ref로 지역 변수를 반환
const TBigType& a = [](){
TBigType result;
// ...
return result;
}();
use(a); // by const ref
이렇게 const 참조에서 결과를 캡처해도 괜찮습니까?람다에서 const ref로 지역 변수를 반환
람다는 prvalue를 반환하므로 호출식이 임시 객체이며, 수명이 참조에 바인딩되어 있기 때문에 수명이 연장됩니다.
int f() { return 12; }
const int& a = f();
여기 a
는 유형 int
과 가치 12
의 임시 객체에 바인딩 :
상황은 간단하게 예를 들어, 다음과 완전히 유사하다.
람다의 반환 형식을 지정하지 않으면 반환 형식은 항상 void
또는 개체 형식입니다. 람다가 lvalue 또는 xvalue를 반환하도록하려면 반환 유형을 명시 적으로 지정해야합니다. -> int&
, -> auto&
, -> decltype(auto)
등
가능하면 'TBigType'에 이동 생성자를 지정하는 것이 좋습니다. –
@ LightnessRacesinOrbit : Meh. 그것은 어쨌든 복사 생략됩니다. –
나는 완전히 확신하고 싶다. Pre-C++ 17, 이동 생성자입니다. –