C++에서 함수가 객체를 반환할 때마다 copy나 move가 발생한다고 생각하기 쉽습니다.그래서 성능을 걱정한 나머지 return 문에 std::move를 붙이는 코드를 종종 보게 됩니다.하지만 C++17 이후에는 prvalue 반환에서 copy elision이 보장되는 경우가 있고, named local object 반환에서도 compiler가 NRVO를 적용할 수 있습니다.오히려 return std::move(local)처럼 작성하면 NRVO가 막히고 move가 강제로 발생할 수 있습니다. 객체를 값으로 반환할 때는 먼저 copy elision과 NRVO 가능성을 이해하고, local object에 습관적으로 std::move를 붙이지 않는 것이 중요합니다. copy elision은 값 반환 코드를 ..