[C++] Const 키워드에 대해
2022. 2. 9. 23:12ㆍLanguages/C++
Const 변수
const int rangeDistance = 125;
- const 키워드를 사용하여 값을 상수로 선언하여 프로그래머가 변경할 수 없도록 지정할 수 있다. 즉, 읽기만 가능
- 컴파일 타임 때 해당 const 상수의 값이 결정되며, 런타임 중에는 변경할 수 없다.
- 평타 사거리, 시야 거리, 스킬 계수 등과 같이 한 번 설정한 값을 계속 유지하면서 사용할 때 유용하고, 프로그래머의 실수로 값을 변경하여 버그를 발견하기 어려운 상황 또한 예방해준다.
포인터 상수와 상수 포인터
포인터 상수
- 포인터가 가리키는 값을 상수로 만들어 변경이 불가능하도록 만든다.
- 포인터가 가리키는 변수의 값을 직접 변경하거나, 포인터 주소를 변경하는 것은 가능
int hp = 100, damage = 5;
const int* ptr = &hp;
// (*ptr) = 15; 포인터가 가리키는 값 변경 불가능
hp = 15; // 변수 값 변경 가능
ptr = &damage; // 포인터 주소값 변경 가능
상수 포인터
- 포인터가 가리키는 주소값 자체를 상수로 만들어 변경이 불가능하도록 만든다.
- 포인터에 다른 새로운 주소를 할당하는 게 불가능
- 포인터가 가리키는 값이나 가리키는 변수를 직접 변경하는 것은 가능
int hp = 100, damage = 5;
int* const ptr = &hp;
// ptr = &damage; 포인터 주소값 변경 불가능
(*ptr) = 15; // 포인터가 가리키는 값 변경 가능
hp = 15; // 변수 값 변경 가능
포인터가 가리키는 주소도, 가리키는 값도 변경할 수 없도록 다음과 같이 사용할 수도 있다.
int hp = 100, damage = 5;
const int* const ptr = &hp;
// ptr = &damage; 포인터 주소값 변경 불가능
// (*ptr) = 15; 포인터가 가리키는 값 변경 불가능
hp = 15; // 변수 값 변경 가능
Const 멤버 함수
class Monster {
int hp;
public:
int GetHP() const; // 상수 멤버 함수 선언부
void SetHP(int hp);
};
int Monster::GetHP() const { // 상수 멤버 함수 구현부
return hp;
}
void Monster::SetHP(int hp) {
this->hp = hp;
}
- const 키워드를 통해 멤버 함수를 선언하면, '읽기 전용' 함수로 지정할 수 있다. 즉, 상수 멤버 함수가 된다.
- 해당 함수는 다른 변수의 값을 바꾸지 않는 함수라고 다른 프로그래머에게 명시시킬 수 있다.
- 상수 함수 내에서는 객체들의 읽기만 수행되고, 상수 함수 내에서 호출할 수 있는 함수는 다른 상수 함수만 가능
Const 객체
Monster slime;
const Monster ribbonPig;
slime.GetHP();
slime.SetHP(100);
ribbonPig.GetHP();
// ribbonPig.SetHp(100); const 객체는 내부 값 변경 불가
- const 키워드를 사용한 객체는 내부 멤버 값을 읽기만 가능하고, 수정은 불가능하다.
- 이런 특징을 이용해서, 함수에서 const &로 매개변수를 받아 참조한 객체 수정은 불가능하고 읽기만 가능하도록 응용할 수도 있다.
참고
728x90
반응형
'Languages > C++' 카테고리의 다른 글
[C++] mutable 키워드 (0) | 2022.03.08 |
---|---|
[C++] explicit 키워드 (0) | 2022.02.12 |
[C++] 참조 리턴 함수 (0) | 2022.02.09 |
[C++] 초기화 리스트(Initializer list), static (0) | 2022.02.09 |
[C++] 복사 생성자(Copy constructor), 얕은 복사(Shallow Copy), 깊은 복사(Deep Copy) (0) | 2022.02.09 |