해결된 질문
작성
·
206
답변 5
0
오른값 참조는 좀 특별한 케이스라서
어셈블리에서 꼭 어떻게 동작한다고 하기 어렵고,
그냥 C++에서 정의하는 move semantics를 만족하기 위해
컴파일러가 수단과 방법을 가리지 않는다(?)
정도로 이해하는 것이 맞을 것 같네요.
물론 어셈블리에서 오른값 참조의 개념도 존재하지 않는 것은 마찬가지이고,
필요하다면 주소값을 넘겨야하는 것은 동일합니다.
그리고 중간 복사를 생략하기 위한 코드를 생성하는 등
더 포괄적인 전략이 들어가야 할 것 같네요.
0
0
[원본 닉네임으로 복사없이 넘긴다]는
C++ 관점에서 보면 맞는 비유지만,
어차피 어셈블리로 넘어가면 [닉네임을 넘긴다]는 개념은 존재하지 않습니다.
분석하면 결국 포인터와 마찬가지로 주소값을 넘겨서 작동합니다.
0
0
일반 참조 Type&는 사실상 포인터랑 같은 개념이고,
어떤 객체의 주소를 넘기는 것입니다.
오른값 참조 Type&&는 C++11에서 새로 생긴 개념인데
'복사하지 않고 원본 자체를 넘긴다(?)'고 비유할 수 있습니다.
이걸 쓰는 이유는 그냥 성능 향상 때문에 그런데
자세하게 설명하기에는 너무나도 내용이 방대해
잘 설명된 블로그들을 참조 바랍니다.
https://modoocode.com/189
추가로 Effective Modern C++ 책 초반부터에서도 해당 내용이 나오는데,
어느 회사를 가도 신입 교육은 저 책으로 하니
미리 살펴보면 좋습니다.