C++ const reference 변수와 그냥 변수의 차이점
조회수 6464회
예를 들어 Point라는 클래스가 있으면,
const Point Point::operator+(const Point& a) 와 const Point Point::operator+(Point a) 는 무슨 차이가 잇나요?
const Point&가 call by value 가 아니라 call by reference로 하기 때문에 속도가 더 빠르다는 것만 알고있는데 좀 자세히 설명해주실수 있는분 계신가요ㅠㅠ
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
1. const는 상수화라는 의미입니다.
위의 경우
const Point& a
라고 지정하면,a
의 레퍼런스 대상을 변경할 수 없게 한다라는 뜻이 됩니다.2.
call by value
vs.call by reference
call by value
방식의 값 전달은 값을 복사해서 전달합니다.- 주의: 클래스 오브젝트의
call by value
전달을 위해서는 필히 복사생성자(Copy Constructor)를 구현해야만 합니다. - 인자 전달 후, 원본 값과 전혀 별개의 개체임으로 함수안에서 값을 변경해도, 원본 인자에 영향을 주지 않습니다.
- 주의: 클래스 오브젝트의
call by reference
방식의 값 전달은 원본의 값의 그대로 사용하며, 참조만 전달합니다. (C에서는 포인터로 이를 흉내내었으나, C++에서는 별도로 제공합니다.)- 원본을 전달하기 때문에, 함수안에서 개체에 조작을 행한경우, 함수 종료후에도 그 영향이 남아있게 됩니다.
- 위 설명에서 본 것과 같이 값을 복사하는 행위가 없기 때문에
call by refernce
가call by value
보다 빠릅니다.
댓글 입력