반환 값 최적화는 다음 예제에서 발생합니까? (아마도 컴파일러에 의존하는 질문. 어떤 경우에는 내가 최근 그 소리/GCC와 같은 "전형적인"현대 컴파일러에 대한 궁금하네요 가정합니다.)중첩 범위에서의 반환 값 최적화
Blah factory() {
return Blah();
}
void func() {
Blah blah;
if (condition) {
blah = factory();
blah.DoSomething();
} else {
blah = factory();
blah.DoSomethingElse();
}
blah.DoOneMoreThing();
}
을 내가 명시 적으로 같은 라인에서 개체를 구성하고 있지 않다 알고 팩토리 함수를 호출하는 것으로 충분하지만 위의 예에서 충분히 똑똑한 컴파일러가 확실히 복사를 최적화 할 수 있습니다 (factory()
으로 설정하기 전에 인스턴스 blah
을 건드리지 않았기 때문에).
RVO가 실제로 발생하지 않으면 변경하지 않고 복사본을 피할 수있는 방법이 있습니까? factory
?
이 코드는 매우 익숙합니다 (https://www.youtube.com/watch?v=3taEuL4EHAg). –
이유 :'Blah x = factory(); if (condition) {x.f(); } else {x.g(); } x.h();'? –
나는 최근에 매우 비슷한 질문을했다. http://stackoverflow.com/questions/26959846/move-semantics-in-eigen 그리고 당신이 copy-and-swap copy ctor를 구현하면 괜찮을 것 같다. 확실히 당신이'Blax x = factory();라고 쓰면 copy elision이 시작될 것입니다. – vsoftco