함수에 매개변수로 변수를 넘겨줄때 함수내에서 변경 불가능하게 하려고 const를 붙이잖아요
1. void HappyFunc(const int &ref){ }
2. void HappyFunc(const int num){ }
보통 1의 방식으로 쓰는데 2의 방식으로 써도 동작이 되잖아요 그런데 1의 방식으로 쓰는 이유가 뭔지 1과 2의 차이점이 뭔지
궁금합니다.
저의 예상
a. 코드의 일관성을 위해서 함수 내부에서 변경하면 참조자 넣으면 되고(NULL값이 안나오는게 보장이될경우)
변경하면 안될경우 그냥 앞에 const를 붙임
b. 1의 경우 메모리 상으로 보면 참조자 하나만 만들면됨
( 참조자 몇바이트인지 알고싶은데 sizeof 하면 가르키는 놈의 크기가 나와버리니까 모름. 근데 포인터처럼 4바이트가 아닐까 생각)
2의 경우 매개변수 타입의 지역변수를 하나 만듬 그리고 값을 복사함 함수 끝날 때 삭제시켜야해서 타입의 크기가 크거나 동적할당이 있는
객체면 생성 및 소멸 비용이 큼
예상이 맞는지 아니면 다른 이유가 있는지 알려주시면 감사하겠습니다.
둘다 상관없을거 같기는한데 만약 내가 코드를 보는 입장이라면 ref를 쓰면 "참조"한다는 느낌이고 그냥 받아오면 "복사"해온다는 느낌이라 어차피 const로 받을꺼라면 참조만 할꺼니까 ref를 붙이면 역할을 알아보기 더 쉽지 않을까?
이건 그다지 깊이 생각해본적이 없어서 잘 모르겟네
코딩하면서 여태까지 저런 코드 본 적이 없는데.. 딱히 저렇게 쓸 이유가 없지 않나?
아래처럼쓰면 함수안에서 지역변수를 만들잖아