1. const
해당 값이 상수(변하지 않는 값)임을 지정하고, 프로그래머가 초기화 외에는 수정할 수 없게 하는 키워드다.
포인터의 위치에 따라 const가 갖는 의미가 다르다.
2. 상수 포인터 (const pointer)
int a = 100;
int b = 200;
//non const 포인터
int* ptr = &a;
ptr = &b; //주소 변경 가능
*ptr = 300; //값 변경 가능
//상수 포인터(const pointer)
int* const ptr2 = &a;
ptr2 = &b; //포인터가 상수이므로 변경 불가능
*ptr2 = 300; //값은 변경 가능
포인터 *의 우측에 const가 위치한다.
포인터 변수를 상수화한 것이며, 초기에 가리키는 주소를 고정한다.
선언과 동시에 초기화해야 한다.
3. 상수에 대한 포인터 (pointer to const)
int a = 100;
int b = 200;
//non const 포인터
int* ptr = &a;
ptr = &b; //주소 변경 가능
*ptr = 300; //값 변경 가능
//상수에 대한 포인터
const int* ptr2 = &a;
ptr2 = &b; //포인터가 상수가 아니므로 변경 가능
*ptr2 = 300; //가리키는 값이 상수이므로 변경 불가능
포인터 *의 왼쪽에 const가 위치한다.
int *ptr을 상수화하겠다는 뜻으로, *ptr이 가리키는 값이 상수가 되어 값을 변경할 수 없게 된다.
4. 상수에 대한 상수 포인터 (const pointer to pointer)
int a = 100;
int b = 200;
//non const 포인터
int* ptr = &a;
ptr = &b; //주소 변경 가능
*ptr = 300; //값 변경 가능
//상수에 대한 상수 포인터
const int* const ptr2 = &a;
ptr2 = &b; //포인터가 상수이므로 변경 불가능
*ptr2 = 300; //가리키는 값이 상수이므로 변경 불가능
포인터 변수와 *ptr 모두 상수화한 것이기 때문에 포인터와 값 모두 변경 불가능하다.
5. 클래스에서 const
클래스에서 const를 선언할 시 반드시 초기화를 해줘야 한다.
멤버 함수 반환값이 const라면 반환값이 상수다.
함수가 const인 경우 해당 함수 내에서 멤버 변수들을 읽기 전용으로 보겠다는 뜻이다.
이 경우 멤버 변수를 수정할 수 없고, 다른 멤버 함수를 부를 때 const인 함수만 호출 가능하다.
참고자료
https://coding-factory.tistory.com/660
'CS 지식' 카테고리의 다른 글
[C++] map vs unordered_map (0) | 2025.05.08 |
---|---|
[C++] malloc(), free() vs new, delete (0) | 2025.04.20 |
[C++] Cast (0) | 2025.04.19 |
[C++] 배열과 리스트 (0) | 2025.04.19 |
[C++] Sort 함수 (0) | 2025.04.19 |