• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

15.4 std::move 관련

23.04.08 21:43 작성 조회수 271

1

14:05쯤 18, 19행 operator 오버로딩이 다르다고 직접 디버거로 찍어보라고 하셨는데, 디버거에서 어떻게 확인해야하는지 모르겠습니다. (std::move에 들어가서 볼 수 있을 줄 알았는데 제가 못 찾는건지 확인이 어려워서요...)

 

11:00쯤 v.push_back(str);과
v.push_back(std::move(str)); 을 비교한 것처럼,
오버로딩된 함수를 사용하는 것(하나는 l-value로 parameter를 받고 하나는 r-value로 parameter를 받는)을 말씀하시는 것 같은데

17행의 parmeter로 들어온 b도 l-value,
18행의 지역변수인 tmp도 l-value 아닌가요?

아니면 b는 T&로 받아오고, tmp는 T로 받아서 오버로딩되었다는 뜻인가요?

답변 1

답변을 작성해보세요.

2

Soobak님의 프로필

Soobak

2023.04.09

안녕하세요, 답변 도우미 Soobak 입니다. 🍉

비교 대상에 있어서 혼동이 있으셨던 것 같습니다.

a = std::move(b); 에서의 = 연산자, b = std::move(tmp); 에서의 = 연산자는 이동 대입 연산자입니다. 이 둘을 서로 비교하는 것이 아니라, 이 둘과 바로 윗부분에서 주석 처리가 된, 복사 대입 연산자를 사용하는 부분과 비교를 해보는 것입니다.

질문에서 말씀하신 것 처럼, v.push_back(str)v.push_back(std::move(str)) 을 비교하였던 것을 떠올려보시면 이해가 되실 것 같습니다. 👍