다음과 같은 컴파일 : 뭔가에 const를 참조를 반환경고 : 로컬 임시 객체에 대한 참조를 반환
namespace platform {
struct event {};
struct keyboard_event : public event {};
const platform::event& wait_event()
{
return platform::keyboard_event();
}
}
int main(int argc, const char* argv[])
{
const platform::event& event = platform::wait_event();
return 0;
}
는 그 소리와 함께 다음과 같은 경고를 얻을 수
main.cc:7:12: warning: returning reference to local temporary object [-Wreturn-stack-address]
return platform::keyboard_event();
^~~~~~~~~~~~~~~~~~~~~~~~~~
그러나 그것은 수명을하지 않는 확장 ? 현재 초안 나를 위해로드되지
그래서 내가 대신 cppreference.com를 인용하겠습니다하십시오 CONST 좌변 참조에 또는를 rvalue 참조 바인딩에 의해 연장 될 수있다
임시 개체의 수명을 (C++ 11 이후), 자세한 내용은 참조 초기화를 참조하십시오.
동일한 효과가 있지만 경고가 표시되지 않도록하려면 어떻게 다시 쓸 수 있습니까?
'platform :: keyboard_event()'는 r 값입니다. 그것을'const &'로 바인드하여 리턴한다. 하지만 temp, const 또는 not에 대한 참조를 반환 할 수는 없습니다. 고전적인 "임시 참조로 복귀"경고입니다. – xinaiz
"참조 초기화를 참조하십시오"에서 링크를 따라 간다면 cppreference가 "반환 문에서 함수의 반환 값에 대한 임시 바인딩이 확장되지 않았습니다"라고 계속 말합니다. – Cubbi