Effective modern cpp item25
- 4. 잘못된 사용 예 1
오른값 참조에 forward 사용
n은 미지정 값을
가지게 된다
- 6. 잘못된 사용 예 1
오버로딩을 사용해서 해결?
+ 관리 해야 할 코드 증가
+ 수행 비용 증가
+ 가변성이 나빠진다
- 7. 잘못된 사용 예 2
move나 forward로 보낸 객체를 사용
순서가 바뀌면 의도하지 않은 결과가 나올 수 있다
- 8. 적절한 사용 예
함수 리턴 값이 value 타입이고
반환형식이 move나 forward에 묶여있는 경우
- 9. 적절한 사용 예
함수 리턴 값이 value 타입이고
반환형식이 move나 forward에 묶여있는 경우
이동 연산이 복사 연산보다
비용이 적을 경우
성능상 이득을 얻을 수 있다
- 10. 잘못된 사용 예 3
함수 리턴 값이 value 타입이고
반환형식이 이름이 있는 지역 변수일 경우
- 11. 반환값 최적화
Return Value Optimization
- 그 지역 객체의 형식이
함수의 반환 형식과 같고
- 그 지역 객체가 함수의 반환 값일 경우
임시객체의 생성을 피하도록 최적화 한다
- 15. 잘못된 사용 예 3
함수 리턴 값이 value 타입이고
반환형식이 이름이 있는 지역 변수일 경우
임시객체가 생성 된다
- 16. 결론
- 오른값 참조나 보편 참조가 마지막으로 쓰이
는 지점에서, 오른값 참조에는 std::move를,
보편 참조에는 std::forward를 적용하라
- 결과를 값 전달방식으로 돌려주는 함수가 오
른값 참조나 보편 참조를 돌려줄 때에도 각각
std::move나 std::forward를 적용하라
- 17. 결론
- 반환값 최적화의 대상이 될 수 있는 지역 객체
에는 절대로 std::move나 std::forward를 적
용하지 말아야 한다