인프런 커뮤니티 질문&답변

poiqwe님의 프로필 이미지
poiqwe

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

강의와 상관없는 c++ 질문입니다.

해결된 질문

작성

·

206

0

안녕하세요

좋은강의 만들어주셔서 감사합니다.

강의와 전혀 상관없지만 질문할 곳이 없어서 여쭤봅니다.

c++ 11에서 나왔다고 하는 Type&& , rvalue 참조가 뭔지 이해를 못하겠습니다.

어떤용도로 왜사용하는지, Type&와 무슨차이가 있는지 알고 싶습니다.

답변 5

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

오른값 참조는 좀 특별한 케이스라서
어셈블리에서 꼭 어떻게 동작한다고 하기 어렵고,
그냥 C++에서 정의하는 move semantics를 만족하기 위해
컴파일러가 수단과 방법을 가리지 않는다(?)
정도로 이해하는 것이 맞을 것 같네요.

물론 어셈블리에서 오른값 참조의 개념도 존재하지 않는 것은 마찬가지이고,
필요하다면 주소값을 넘겨야하는 것은 동일합니다.
그리고 중간 복사를 생략하기 위한 코드를 생성하는 등
더 포괄적인 전략이 들어가야 할 것 같네요.

0

poiqwe님의 프로필 이미지
poiqwe
질문자

그럼 Type&&는 어셈블리에서 다르게 작동하게 되는건가요?

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

[원본 닉네임으로 복사없이 넘긴다]는
C++ 관점에서 보면 맞는 비유지만,
어차피 어셈블리로 넘어가면 [닉네임을 넘긴다]는 개념은 존재하지 않습니다.
분석하면 결국 포인터와 마찬가지로 주소값을 넘겨서 작동합니다.

0

poiqwe님의 프로필 이미지
poiqwe
질문자

저는 지금까지 Type&가 원본 닉네임으로 복사없이 넘긴다로 알고있었는데
Type&도 주소 전달이었군요
감사합니다.

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

일반 참조 Type&는 사실상 포인터랑 같은 개념이고,
어떤 객체의 주소를 넘기는 것입니다.
오른값 참조 Type&&는 C++11에서 새로 생긴 개념인데
'복사하지 않고 원본 자체를 넘긴다(?)'고 비유할 수 있습니다.
이걸 쓰는 이유는 그냥 성능 향상 때문에 그런데
자세하게 설명하기에는 너무나도 내용이 방대해
잘 설명된 블로그들을 참조 바랍니다.

https://modoocode.com/189

추가로 Effective Modern C++ 책 초반부터에서도 해당 내용이 나오는데,
어느 회사를 가도 신입 교육은 저 책으로 하니
미리 살펴보면 좋습니다.

poiqwe님의 프로필 이미지
poiqwe

작성한 질문수

질문하기