C++23에서 std::move 없이 move하기: 컴파일러가 알아서 해주는 시대

Move in C++ without a std:move

C++23에서 std::move 없이 move하기: 컴파일러가 알아서 해주는 시대

C++23부터는 rvalue 참조 매개변수를 반환하는 함수에서 암시적 move가 적용되어, 더 이상 std::move를 수동으로 호출할 필요가 없습니다. 이 글은 C++17의 보장된 copy elision부터 C++23의 암시적 move까지, 불필요한 복사와 move를 줄여 성능을 최적화하는 방법을 설명합니다. 저자는 std::move를 드물게 사용하라는 자신의 조언이 C++23에서 더욱 강화되었다고 강조합니다.

C++23 모드로 컴파일러를 전환하면 두 경우 모두 암시적 move가 수행됩니다. std::move가 필요 없습니다.
  1. sprocketz

    NVRO를 구현하는 것이 왜 그렇게 훨씬 더 어려운가요? RVO처럼 의무화할 수는 없었나요? 컴파일러는 단순히 직접 생성하는 return 문을 특별 취급하는 것뿐인가요?

  2. fluoridation

    안타깝게도, 올바르거나 성능이 좋은 동작을 얻기 위해서는 값 의미론을 이해하는 것에서 벗어날 수 없다고 생각합니다.

  3. tom_

    작성자가 이 글을 읽고 있다면: 두 개의 복잡한 예제는 동일합니다.

이 날의 다른 글

2026-09-02