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

dlalwjd3323님의 프로필 이미지
dlalwjd3323

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part3: 자료구조와 알고리즘

연결 리스트 구현 연습

list의 insert, erase에서 매개변수는 왜 iterator를 복사형으로 받나요?

작성

·

148

0

요약
1. 왜 참조형을 사용하지 않는지 궁금합니다.
2. 일반 참조형을 사용했을때는 왜 컴파일 오류가 발생하는지, const 참조형을 사용하면 컴파일 오류가 사라지는지 궁금합니다.

const iterator& 또는 iterator&를 사용하지 않은 이유를 알고싶습니다.

내부에서 iterator의 데이터인 _node의 값이 변경되어야 하기 때문에 const를 사용하지 않는건가? 싶어서
const를 제외해보았더니, 스크린샷 2024-04-11 오후 2.44.49.png그냥 참조 &의 경우 li.end()에서 반환하는 iterarotr값을 인자로 받지를 못하는것 같습니다.
이것은 왜 그런지 궁금합니다.

답변 1

0

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

일단 iterator는 사실상 포인터를 래핑한 개념이라
굳이 참조로 할 이유가 없습니다.
복사를 해도 복사 이용이 딱히 없구요.

그리고 질문주신 빌드 에러는 iterator의 문제가 아니라
l-value, r-value에 대한 이해도 문제입니다. (왼값, 오른값 참조)
참조는 실체의 주소를 '참조'하는 개념에 가까운데
오른값은 임시로 할당된 주소이기 때문에
이를 참조하는 것은 이치에 맞지 않고 경우에 따라 위험할 수 있습니다.
결과적으로 C++ 문법에서 아예 막아놓은 것이고
const & 참조 값의 경우 애당초 그 값을 수정하지 않겠다는 약속을 했기 때문에,
오른값을 넘겨도 (즉 임시값을 넘겨도) 문제가 발생하지 않습니다.

이 부분은 C++문법이 그런 것이라, 조금 더 연구를 해보시면 되겠습니다.

 

 

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

감사합니다!

dlalwjd3323님의 프로필 이미지
dlalwjd3323

작성한 질문수

질문하기