(나는 그것이 foo는() 호출의 지속 시간이 남아 알고 있지만, 할당이 나를 주저하게) 문제의 코드 즉, 내가 별도의 두를 필요가 여기에 const를 참조에 의존하는 몇 가지 합법적 인 용도로 사용
을 기능
내가 피하고 싶은T const & foo_cr(T const & dflt);
T const & foo_v(T dflt);
(단지 이름이 같은 사랑의 다른 서명에 의존 나에게 위험 조금 보인다.)
(나는 그것이 foo는() 호출의 지속 시간이 남아 알고 있지만, 할당이 나를 주저하게) 문제의 코드 즉, 내가 별도의 두를 필요가 여기에 const를 참조에 의존하는 몇 가지 합법적 인 용도로 사용
을 기능
내가 피하고 싶은T const & foo_cr(T const & dflt);
T const & foo_v(T dflt);
(단지 이름이 같은 사랑의 다른 서명에 의존 나에게 위험 조금 보인다.)
임시에 대한 참조를합니까 u는 "생존" x에 할당 된 ntil?
일반적으로 예. foo
이 dflt
을 반환하면 해당 참조 (임시 5까지)는 초기화 후까지 전체 표현식의 끝까지 유효합니다.
C++ 03, 12.2/3 :
구현이 가 아닌 사소한 생성자 (12.1)가있는 클래스의 임시 개체를 소개, 그것은 생성자를 호출하도록 보장한다 임시 개체. 비슷하게, 소멸자는 임시가 아닌 소멸자 (12.4)와 함께 호출되어야한다. 임시 개체는 의 마지막 단계에서 전체 식 (1.9)을 평가 한 결과 (어휘 적으로) 만들어진 위치 인 이 포함 된 것으로 평가됩니다. 이 평가가 인데도 예외가 발생하더라도 마찬가지입니다.
12.2/4 및 12.2/5 이상, 특히이 규칙의 예외 사항이 있습니다.
내가 빠진 ...
을 반환 할 때 어떤 일이 발생하는지 알 수 없지만이 문제에 관해서는 묻지 않았습니다.
현재 "x"에 대한 상점이 전체 표현식. http://llvm.org/bugs/show_bug.cgi?id=9783을 참조하십시오. 그러나위원회와 (희망적으로) 사용자 모두가 강력하게 원하는 바입니다. 그러나 그것과는 별도로, * foo (lvalue-to-rvalue)에 의해 반환 된 참조의 전체 표현식의 일부입니다 1.9p10 및 그 예문 참조 –
빠른 응답 주셔서 감사합니다! 예, 그 케이스는 안전합니다 - 그것을 제외시켰다 (추가적인 매개 변수로서 참조에 의해 전달 된 집합의 요소에 대한 참조). – peterchen
무엇이'...? ... : dflt; 0_o –
이 컨텍스트에서'...'는 "질문과 관련이없는 코드입니다. 주석으로 변경했습니다. 아마도 더 명확합니다." – peterchen