반응형
반응형
C++에서 const
키워드는 '상수'라는 뜻이다. 한 번 정해진 값은 바꿀 수 없게 만든다.
const
사용 방법은 몇 가지가 있는데, 위치에 따라 의미가 달라진다.
💋 변수 앞에 const
const int maxCount = 100;
이 코드에서 maxCount
는 100이라는 값을 갖고, 이 값은 상수로 선언되어 프로그램 내에서 바꿀 수 없다.
💋 const와 포인터
✔️ const int* ptr
const int* ptr = &maxCount;
*ptr
를 변경할 수 없는 것!- 포인터 자체가 가리키는 주소
ptr
는 변경 가능 - 포인터가 가리키는 데이터
*ptr
는 변경 불가능
ptr
은 int
의 포인터인데, ptr
이 가리키는 값을 바꿀 수 없다. 그래서 ptr = 200;
이런 식으로 값을 변경하려고 하면 컴파일 에러가 난다.
✔️ int* const ptr
int value = 5;
int* const ptr = &value;
ptr
를 변경할 수 없는 것!- 포인터가 가리키는 데이터
*ptr
는 변경 가능 - 포인터 자체가 가리키는 주소
ptr
는 변경 불가능
여기서 ptr
은 상수 포인터로, ptr
이 가리키는 주소는 바꿀 수 없다. 그래서 ptr = &maxCount;
이런 식으로 다른 주소를 가리키게 하려고 하면 컴파일 에러가 난다. 하지만 ptr
을 통해 가리키는 값을 변경하는 건 가능하다.
💋 함수와 const
✔️ 함수 자체를 const
로 정의
class MyClass {
public:
int value;
int getValue() const {
return value;
}
};
여기서 getValue
함수 뒤에 const
가 붙어서 이 함수 내에서는 클래스의 어떤 멤버 변수도 변경할 수 없다는 걸 의미한다.
constant functions are not allowed to alter class member data
이렇게 하면 함수가 객체의 상태를 변경하지 않는다는 것을 보장할 수 있다.
실제로도 getValue
함수는 value를 수정할 수 없고, 수정하려고 하면 이런 에러가 나게 된다.
int getDollars() const {
dollar = -1;
return dollar;
}
결과는? 컴파일 에러
/Users/gitchan/Projects/gitchan-yonsei/2024-oop/midterm/Examples/Ch8_6.cpp:13:16: error: cannot assign to non-static data member within const member function 'getDollars'
dollar = -1;
~~~~~~ ^
/Users/gitchan/Projects/gitchan-yonsei/2024-oop/midterm/Examples/Ch8_6.cpp:12:9: note: member function 'Money::getDollars' is declared const here
int getDollars() const {
~~~~^~~~~~~~~~~~~~~~~~
1 error generated.
✔️ 파라미터에서 사용된 const
void welcome(const BankAccount &account)
{
account.output();
}
메서드 파라미터로 const
를 사용했다면, 그 함수 내부에서 호출되는 모든 BankAccount
메서드는 const
로 정의된 것들이어야만 한다.
도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!
반응형