C++ const reference 변수와 그냥 변수의 차이점


예를 들어 Point라는 클래스가 있으면,

const Point Point::operator+(const Point& a) 와 const Point Point::operator+(Point a) 는 무슨 차이가 잇나요?

const Point&가 call by value 가 아니라 call by reference로 하기 때문에 속도가 더 빠르다는 것만 알고있는데 좀 자세히 설명해주실수 있는분 계신가요ㅠㅠ

  • 2016년 06월 13일에 작성됨
    컴퓨터공학과 재학중인 학생입니다.

조회수 249


1 답변


좋아요
2
싫어요
채택취소하기

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 referncecall by value보다 빠릅니다.
  • 2016년 06월 13일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close