[C/C++] const int& vs const int

반응형
반응형

*개인적인 공부내용을 기록하는 용도로 작성한 글 이기에 잘못된 내용을 포함하고 있을 수 있습니다.


const 키워드는 변수의 값이 변경되지 않기를 원하는 경우 변수를 상수화 시키는 용도로 사용하곤 합니다.

int a = 10;
const int a = 10; // 상수화

const는 변수 뿐 만 아니라 포인터 혹은 참조자(&)에도 사용이 가능합니다. 이번 포스팅에서는 const를 참조자(&)에 사용한 예시와 const와 참조자를 함께 사용 시 얻을 수 있는 이점에 대해 정리해 보도록 하겠습니다.

 

참조자에 100과 같은 값(리터럴)을 대입하려고 하면 에러가 발생합니다. 그 이유는 어찌보면 당연한데 참조자는 변수의 메모리 주소를 저장하는 문법인데 리터럴 값을 대입하려고 하니 오류가 발생하는 것 입니다.

int& a = 100; // error;

 

하지만 아래처럼 const 키워드를 앞에 붙여주면 참조자에도 값(리터럴)을 대입할 수 있습니다.

const int& a = 100; // const 키워드 사용 시 가능

 

그렇다면 왜 굳이 const 키워드와 참조자를 사용하면서 까지 값을 대입해야 하는지 의문이 들 수 있습니다.

const int a = 100;
const int& a = 100;
// 무슨 차이 ?

 

참조자의 const 사용은 함수의 파라미터로 사용 시 그 진가를 발휘합니다.

우선, 보통의 Call-By-Reference 방식의 함수였다면 불가능할 리터럴을 바로 함수의 인자로 보내는 것이 가능해 집니다.

// Call-By-Reference_3
void prtX(const int &x)
{
	cout << x << endl;
}

void prtY(int &y)
{
	cout << y << endl;
}

int main(){
	prtX(6) // ok
    	prtY(6) // error
	return 0;
}

 

다음으로 const int&를 함수의 파라미터로 사용하면 const int와 달리 변수의 복사가 일어나지 않습니다.

const int 방식으로 함수의 파라미터를 받을 때는 call-by-value 즉, 값에 의한 전달 방식이기에 변수의 복사가 발생해 복사 손실 문제가 발생합니다.

하지만 const int& 방식으로 보내면 call-by-reference 이기에 복사 손실 문제에서 자유롭습니다.

 

* call-by-value와 call-by-reference 관련 포스팅은 다음을 참고해 주세요. link

반응형

댓글

Designed by JB FACTORY