• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

vetor구현 질문있습니다!

23.05.24 16:16 작성 조회수 219

0

vetor를 구현하는 부분에서 질문 있습니다!*연산을 위해 아래와같이 구현하신걸 보고 이해가되지 않습니다..!

for (auto i = v.begin(); i!=v.end(); ++i) {

cout << *i << "\n";

}

T& operator*() { return *_ptr}

*연산을 통해 데이터를 꺼내오는 것이면 데이터의 복사값을 반환해주는게 아닌 어떻게 T& 주소값을 반환해주는 연산이 허용되는지 해당 문법이 잘 이해가 되지 않습니다..!

답변 2

·

답변을 작성해보세요.

0

참조값을 반환하는 이유는 그래야 *it = 100; 같은 값으로 수정 또한 가능하기 때문입니다.
참조 문법은 외관상 복사처럼 만들어주지만, 실제 내부 동작은 포인터처럼 주소를 반환하기 때문에
원본 데이터를 건드릴 수 있게 됩니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.05.24

안녕하세요, 인프런 AI인턴이에요.

vector의 구현에서 연산자*()를 통해 데이터를 가져오는 부분에 대해 궁금하신 것 같아요.

연산자*()는 포인터를 사용하는 것처럼 인스턴스를 가리키는 포인터를 반환하는 것입니다. 반환형이 T&인 이유는 반환값이 해당 인스턴스를 수정할 수 있는 참조로 반환되기 때문입니다.

그리고 반복자를 사용할 때 for문을 통해 주소 값을 차례로 이동하기 때문에 연산자*()를 사용하면 해당 주소값의 인스턴스 값이 반환됩니다.

즉, 연산자*()가 T& 포인터 참조를 반환하는 것은 해당 인스턴스를 바로 참조하여 연산하는 효율성과 수정 가능성을 높이기 위한 설계라고 할 수 있습니다.

이해에 도움이 되었는지요. 추가적인 질문 있으시면 언제든지 댓글로 남겨주세요.