[C++] const 키워드
Language/C++const 키워드는 어디에 사용하는가에 따라 다양하게 활용된다.
- const 키워드 기본
const 키워드의 가장 기본적인 사용 3가지는 아래와 같다.
1. 변수를 상수화 한다.
1 2 | const int a = 10; a = 20; // error |
2. 포인터가 가리키는 데이터를 상수화 한다.
1 2 3 | int a = 10; const int* pa = &a; *pa = 20; // error |
3. 포인터 자체를 상수화 한다.
1 2 3 4 | int a = 10; int b = 20; int* const pa = &a; pa = &b; // error |
- 멤버 이니셜라이저 (member initiallizer)
클래스에서 변하지 않는 상수로 멤버변수를 초기화 하고 싶을 때가 있다. 하지만 const로 멤버 변수를 선언 후 생성자에서 조작하려고 할 경우 이미 쓰레기값을 초기값으로 상수화 되었기 때문에 생성자를 통한 초기화를 사용할 수 없다.
이럴 때 사용하는 것이 멤버 이니셜라이저라는 문법이다. 이것을 사용하면 const 멤버 변수를 초기화할 수 있다.
1 2 3 4 5 6 7 8 9 10 | class Info { const int id; int password; public: Info(int _id, int _password) : id(_id) { password = _password; } }; |
위와같으 콜론(:)을 이용하여 const 멤버변수를 초기화 할 수 있으며 콤마(,)를로 구분지어 여러 const 멤버 변수를 초기화 할 수 있다.
- const 멤버 함수
멤버 함수를 선언할 때 const 키워드를 붙여 멤버 함수를 상수화 할 수 있다.
멤버 함수가 상수화되면 이 함수를 통해서 멤버 변수의 값이 변경되는 것은 허용되지 않는다.
다음과 같이 사용할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class Info { const int id; int password; public: Info(int _id, int _password) : id(_id) { password = _password; } void showData() const { cout << "id: " << id << endl; cout << "password: " << password << endl; } }; |
이렇게 사용하면 showData라는 정보를 출력해주기만 하는 함수에서 프로그래머의 실수로 멤버 변수의 값을 변경하는 것을 방지할 수 있다.
또한, 상수화된 함수는 상수화되지 않은 함수의 호출을 허용하지 않을 뿐만 아니라, 멤버 변수의 포인터를 리턴하는 것도 허용하지 않는다.
- const 객체
객체또한 생성과 동시에 상수화 하는 것이 가능하다.
객체가 상수화되면 멤버변수의 조작이 불가능해지며, 상수화된 멤버 함수만 호출이 가능해진다.
1 | const AAA a; |
- const 키워드를 써야하는 이유
const 키워드는 쓰나 안쓰나 동작은 똑같기 때문에 별로 필요없다고 생각할 수 있으나, 프로그래머의 실수를 줄여주고 프로그램의 안정성을 높여준다.
만약 프로그래머의 실수로 잘못된 코드가 들어갔지만 컴파일에는 이상이 없어 에러메세지를 받을 수 없다면 이는 매우 치명적이다.
그러므로 프로그램을 작성할때 const 키워드를 가급적 많이 사용하는 것이 좋다.
'Language > C++' 카테고리의 다른 글
[C++] explicit 키워드 (0) | 2015.12.02 |
---|---|
[C++] static 키워드 (0) | 2015.12.02 |
[C++] 복사 생성자 (0) | 2015.12.02 |
[C++] friend 선언 (0) | 2015.12.02 |
[C++] this 포인터 (0) | 2015.12.02 |