타입 다음의 &&는 뭔가요?
글쓴이: dltkddyd / 작성시간: 금, 2014/07/11 - 7:40오후
deque의 emplace 인수의 타입을 살펴보니, 다음과 같이 Args 뒤에 &&가 언급돼 있던데요.
template <class... Args> iterator emplace (const_iterator position, Args&&... args);
타입 다음에 언급된 &는 알리아스를 의미하는 것으로 알고 있습니다. 그런데 &&는 어떤 것인가요? 별칭의 별칭이라도 되는 것인지, 도무지 그 뜻을 모르겠습니다. 이건 검색하기도 힘드네요. 그리고 여러개의 값들을 전달받을 수 있을거라 생각했는데, 하나의 전달만을 받습니다.
Forums:
lvalue reference
lvalue reference
?
C++11 에 추가된 Rvalue Reference 입니다. 여기서 말하는 Rvalue 는 흔히 말하는 임시객체 정도의 의미로 생각하면 됩니다.
이것이 필요한 이유는 Move Semantics 를 위해서인데, 아래와 같은 코드가 빈번하게 쓰이기 때문입니다.
ex)
class A{ A(int); };
func(A(3));
여기서 A(3) 으로 생성되는 객체는 Rvalue 입니다. 생성된 객체는 호출 후에 어디에서도 참조가 불가능하기 때문에 사라집니다.
그래서 func 내에서 해당 객체를 이용할 때는 객체를 복사하여 사용을 하게 되고, 이후 객체는 소멸이 됩니다.
하지만 매번 이렇게 복사와 소멸이 이루어지면 퍼포먼스도 저하되는 등 문제가 많기 때문에 이러한 임시 객체를
직접 받아서 주소 이동만 하여 그대로 쓸 수 있게 만든 것이 Move Semantics 이며, 이 때 Rvalue Reference 가 사용됩니다.
물론 받은 다음 주소를 대입하고 나면 그 과정에서 move() 등의 사용으로 더 이상 Rvalue Reference 가 아니게 됩니다.
그렇다면 ...은 여러개의 임시객체를 받을 수 있도록 하는 것이겠네요.
&를 사용하면 안되는 것인가요? &는 임시객체를 받지 못하나요?
그리고 이렇게 언급하면 여러개의 값이 들어갈 줄 알았는데, 컴파일시 또 오류가 발생합니다.
그런데 1)에서 오류가 발생합니다.
그런데 검색하다 보니 이런 식으로는 사용해도 문제가 발생하지 않는데요. 어떤 식으로 작동하는 걸까요?
2)는 dec3.emplace(dec3.begin()+1, Test('d','e','f'));
와 같다는데요. ...은 저 임시객체를 어떻게 풀어쓰는 것인지 참 궁금합니다.
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
댓글 달기