• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

안녕하세요 질문입니다.

19.11.23 02:31 작성 조회수 104

2

지금까지 강의를 보면 생성자를 만드실때

Simple(const int& id_in){

}

이런식으로 파라미터로 const int& 이렇게해서 참조값을 넣어주시는데요, 

Simple(int id_in){

}

이렇게 넣어도 똑같은데 굳이 참조자를 이용해 초기화를 해주시는 이유가있나요?

물론 참조자를 쓰는 것과 안쓰는 것의 차이는 알고 있습니다.
(같은 질문에 대해 강의를 참고하시라는 답변을 봐서 물론 강의는 보고왔습니다)

Simple(int id_in){

}

으로해도 결국 id_in이 복사되어서 멤버 변수인 m_id에 넣어주면 해당 인스턴스의 m_id를 쓸수도 있는데 왜 항상 참조자를 써서 생성자 멤버변수를 초기화해주시는지 궁금합니다.

그냥 코딩 일관성을 위해서 인가요?

보통 파라미터로 참조자를 받는 것과 그냥 참조자 안받고 call by value로 할때의 차이는 알고있습니다.

근데 저 경우에는 차이가없는것 같은데 저때도 항상 참조자를 이용하시는 이유가 궁금합니다!

답변 3

·

답변을 작성해보세요.

2

맞아요. 스스로 답을 찾으셨네요. 축하합니다. C++는 보통 엔진에 쓰이기 때문에 효율성 높이는 코딩습관이 있으면 도움이 됩니다.

2

sualyer010님의 프로필

sualyer010

질문자

2019.11.23

저도 고민해봤는데 사실 멤버변수 초기화는 굳이 참조자로 하는 이유를 잘 모르겠습니다. 위에서 질문드린대로 일관성을 위해서라면 납득가능하니다만..

예를들어 어떤 값을 리턴해주는 함수의 파라미터로 참조자를 넣어주는것은 call by value를 할때 그 값을 리턴해줘야해서 그걸 또 받아서 사용해야한다는 불편함이 있기때문에 참조자를 사용할 수도 있겠구나 싶은데,  위의 예제에서는 단순히 멤버변수를 초기화할때 참조자를 사용할 경우에는 이점을 찾지못하겠습니다.

오픈소스가 그렇게 한다는건 그만한 이유가 있을텐데 그건 예시마다 다른거고, 분명 이점이 있기때문에 사용할텐데 저 위의 예제처럼 멤버변수 초기화에 사용된느 참조자를 사용해서 어떤 이점이 있는지는 잘 모르겠네요. 단순히 오픈소스가 그렇게한다고해서 따라하고 싶지는 않습니다. 그리고 이어진 강의에서 교수님께서 생성자로 멤버변수 초기화할때 참조자로 안받고 그냥 원시값으로 받아서 하시는 경우가 있습니다. 그래서 더 헷갈리는 것 같네요.

충분히 고민해보고 질문드립니다.

----------

내용추가////

교수님 계속 그냥 강의보다가 문득드는생각인데, 참조자 사용하면 복사가안되니까 그냥 그만큼 메모리를 아낀다는 관점에서 장점이 있는 것 같은 생각이 드네요.. 맞는지 조심스레 여쭤봅니다

그리고 고민결과 그냥 참조자가 아닌 const참조자를 쓰는이유는 사실 참조자말고 포인터를 써도되는데 참조자를 쓰면 함수 호출문장만 보고 얘가 변하는 지 안변하는지 모르니까 그걸 막아주려고 썻다고 생각했습니다.

만약 이게 맞으면 사실 크기가작은 값들은 굳이 복사해도 메모리를 별로안잡어먹으니까 상관없을 것 같긴한데 그래도 그냥 통일성있게 쓰면 좋을 것 같다는 생각이 드네요.

제가 생각하고있는걸 주저리주저리 써봤습니다. 감사합니다.

0

C++ 오픈 소스들을 찾아보시면 비슷한 코딩 스타일을 많이 보시게 될겁니다.

차이를 아신다면 이유가 뭔지 추측해보실 수도 있겠네요. 맞춰보세요. 코드가 길어져서 불편하기 까지 한데 C++ 프로그래머들은 왜 저렇게 할까요?

혹시 추가 댓글이 늦어지면 못 볼 수 있는데 그럴 경우에는 새 글로 다시 질문하셔도 됩니다. 보통은 다 봅니다.