컴파일러가 NRVO (Named Return Value Optimization)를 수행 할 수 있으려면 함수 본문에서 다른 값보다 먼저 반환 값을 선언해야합니다. 나는 이것이 예외 상황에서 스택 해제의 순서로 인한 것 같지만 확실하지는 않습니다. 명명 된 반환 값이 함수 본문에서 처음 선언 된 이유는 무엇입니까?반환 값이 NRVO에 대해 처음으로 선언 된 로컬 일 필요가있는 이유는 무엇입니까?
class C{};
C f(){
C ret; //NRVO possible
return ret;
}
C g(){
int i;
C ret; //NRVO not possible?
return ret;
}
사용 사례 :
편집auto c = f();
auto c2 = g();
: http://www.youtube.com/watch?v=fHNmRkzxHWs분 32:30이있을 수 있습니다 : 당신에게 내가이 이해를 돕는 모든 답변자 감사, 내가 여기 챈들러 Carruth의 문을 의심하기 시작하고 오해의 소지가 있거나 오해하는 것입니다. 반환 변수를 먼저 선언하는 것이 중요하지는 않습니다.
이 제한을 부과하는 일부 * 컴파일러가 * 수 있지만, 일반적으로 이해는 단순히 결함이 -/비활성화 NRVO을 사용하지 않는 변수 정의 순서. –
이 가설을 테스트 해 보셨습니까? 그렇다면 어떤 컴파일러를 사용합니까? – juanchopanza
이 [오래된 링크] (http://msdn.microsoft.com/en-us/library/ms364057(v=80) .aspx) 도움이 될 수 있습니다. – anatolyg