fullstack

'const'에 해당되는 글 1건

  1. [C++] const 키워드

[C++] const 키워드

Language/C++

const 키워드는 어디에 사용하는가에 따라 다양하게 활용된다.




- const 키워드 기본


const 키워드의 가장 기본적인 사용 3가지는 아래와 같다.



1. 변수를 상수화 한다.


1
2
const int a = 10;
= 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