함수의 매개변수를 const 레퍼런스로 전달하는 코드를 자주 볼 수 있다. 얼핏 보면 모순되는 표현이라 생각할 수 있다. 원래 레퍼런스 매개변수를 사용하면 변수의 값을 다른 문맥에서 수정할 수 있는데, const로 지정해버리면 그렇게 할 수 없는 것처럼 보이기 때문이다.
const 래퍼런스의 가장 큰 장점은 성능이다. 함수에 매개변수를 값으로 전달하면 그 값 전체가 복제된다. 하지만 레퍼런스로 전달하면 원본에 대한 포인터만 전달되기 때문에 원본 전체를 복제할 필요가 없다. 또한 const 레퍼런스로 전달하면 복제되지도 않고 원본 변수가 변경되지도 않는 장점을 모두 취할 수 있다.
const 레퍼런스는 특히 객체를 다룰 때 유용하다. 객체는 대체로 커서 복제하는 동안 의도하지 않은 효과가 발생할 수 있기 때문이다.
다음 코드는 std::string 함수에 const 레퍼런스로 전달한는 예를 보여주고 있다.
void printString(const std::string& myString)
{
std::cout << myString << std::endl;
}
int main()
{
std::string s = "Hello Wrold";
printString(s);
printString("Hello Wrold"); // 리터럴을 전달해도 된다.
return 0;
}
함수에 객체를 전달할 때 값으로 전달하기보다는 const 레퍼런스로 전달하는 것이 좋다. 그러면 불 필요한 복제 작업을 피할 수 있다. 만약 전달할 객체를 함수 안에서 수정하려면 non-const 레퍼런스로 전달한다.
전방 선언 Forward Declaration (0) | 2020.09.25 |
---|---|
타입추론 (0) | 2020.06.22 |
스마트포인터 (0) | 2020.06.22 |
네임스페이스 (0) | 2020.06.22 |
virtual inheritance in c++ (0) | 2019.09.05 |
댓글 영역