[C/C++] const int& vs const int
- Archive2/C&C++
- 2022. 2. 6.
*개인적인 공부내용을 기록하는 용도로 작성한 글 이기에 잘못된 내용을 포함하고 있을 수 있습니다.
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
'Archive2 > C&C++' 카테고리의 다른 글
[C/C++] VOL1 함수 포인터 (Function Pointer) 개요 (0) | 2022.02.10 |
---|---|
[C/C++] 함수의 리턴값으로 주소(포인터) 참조자를 받을 시 유의점 (0) | 2022.02.08 |
[C/C++] Call-By-Value VS Call-By-Reference (0) | 2022.02.06 |
[C++] 문자열 기호적 상수 (char[] vs char* vs const char*) (0) | 2022.02.02 |
[C/C++] 포인터와 const (feat. const 키워드의 위치에 따른 차이점) (0) | 2022.02.02 |