C++에서 const로 선언된 멤버 변수는 일반적인 대입 방식으로는 초기화할 수 없습니다. 상수 멤버 변수는 객체가 생성되는 시점에 반드시 값이 정해져야 하기 때문에, 이를 위해서는 생성자의 초기화 리스트(initializer list)를 사용해야 합니다.
초기화 리스트란?
초기화 리스트는 클래스의 데이터 멤버를 초기화하기 위해 사용하는 문법으로, 생성자 이름 뒤에 콜론(:)을 붙이고 그 뒤에 초기화할 멤버들을 나열하는 방식입니다. 여러 개의 멤버를 초기화할 때는 각 멤버를 쉼표(,)로 구분하면 됩니다.
참고로 const 멤버 변수뿐만 아니라 참조(&) 타입의 멤버 변수나 기본 생성자가 없는 클래스 타입 멤버 역시 초기화 리스트를 통해서만 초기화할 수 있습니다.
예제 코드
#include <iostream>
using namespace std;
class MyClass {
private:
const int x;
public:
MyClass(int a) : x(a) { // 초기화 리스트로 const 멤버 x를 초기화
// 생성자 본문
}
void show_x() {
cout << "상수 x의 값: " << x;
}
};
int main() {
MyClass ob1(40);
ob1.show_x();
}
실행 결과
상수 x의 값: 40
핵심 정리
const멤버 변수는 생성자 본문 내부에서 대입(=) 방식으로 초기화할 수 없습니다.- 반드시 생성자의 초기화 리스트를 통해 초기화해야 합니다.
- 값은 객체가 생성될 때 딱 한 번만 설정되며, 이후에는 변경할 수 없습니다.