-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
해결됨
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로 받아서 오버로딩되었다는 뜻인가요?
답변을 작성해보세요.
2
Soobak
2023.04.09
안녕하세요, 답변 도우미 Soobak 입니다. 🍉
비교 대상에 있어서 혼동이 있으셨던 것 같습니다.a = std::move(b);
에서의 =
연산자, b = std::move(tmp);
에서의 =
연산자는 이동 대입 연산자입니다. 이 둘을 서로 비교하는 것이 아니라, 이 둘과 바로 윗부분에서 주석 처리가 된, 복사 대입 연산자를 사용하는 부분과 비교를 해보는 것입니다.
질문에서 말씀하신 것 처럼, v.push_back(str)
과 v.push_back(std::move(str))
을 비교하였던 것을 떠올려보시면 이해가 되실 것 같습니다. 👍
답변 1