const 연산자에 대한 고찰
작성자 : kayaban@lycos.co.kr 작성일 : 2014-02-27

매번 사용하지만 자주 헷갈리는 const 연산자, 간단하게 몇가지 예를 통해 개념을 확실하 잡아보도록 합시다.

예제0) const int, int const

     int const a = 10;
     const int a = 10;

     두 문법 모두 a의 값을 변경 할 수 없다.


예제1) const int*

      int Value = 10;
      const int* pInteger = &Value;

     const int 형의 포인터 타입 변수 pInterger, 따라서 다음과 같이 포인터는 변경이 가능

     int Value = 10;
     int Value2 = 20;
     const int* pInteger = &Value;
     pInteger = &Value2;

     하지만 다음과 같이 값을 변경하는것은 불가

     *pInteger = 20;



예제2) int* const

     int Value = 10;
     int* const pInteger = &Value;

     int 포인터 타입 변수 pInteger, pInteger는 const(상수)로 선언되어 있다.
     즉 int* 타입이 상수가 된다. 따라서 다음과 같이 pInteger 의 값은 변경이 가능

     int Value = 10;
     const int* pInteger = &Value;
     *pInteger = 20;

     하지만 다음과 같이 포인터를 변경하는것은 불가

     pInteger = &Value2; // 불가

예제3) const int*

     int Value = 10;
     int Value2 = 20;
     const int* const pInteger = &Value;
     pInteger = &Value2; // 가능

     const int 포인터 타입 변수 pInteger, 따라서 다음과 같이 포인터는 변경이 가능

     *pInteger = 20; // 불가

     값의 변경은 불가



예제4) const int* const

     int Value = 10;
     const int* const pInteger = &Value;

     const int 포인터 타입 변수 pInteger, pInteger는 상수로 선언되어 있다. 따라서 다음과 같이 포인터 및 값의 변경이 불가

     int Value = 10;
     const int* pInteger = &Value;

     *pInteger = 20; // 불가
     pInteger = &Value2; // 불가


예제5) const int const*

     const int* const 가 아닌 const int const*로 사용하게 되면 int const* 가 되어버려 const 무효가 되어 const int* 와 같은 효과가 발생

     따라서 값의 변경은 불가능 하게 되나 포인터는 변경이 가능하게 된다. 잘못된 문법


예제6) const int&, int const&

     참조자는 참조객체 변경도 불가, const int형 타입이므로 값도 변경 불가


예제7) int foo() const

     멤버 함수를 const로 선언하게 되면 이 함수는 멤버 변수의 값을 변경하지 못하게 된다. 멤버 변수를 직접 변경하는 방법뿐만 아니라

     다른 멤버 함수의 호출을 통해 값이 변경되는 것을 막기 위해 const로 선언되지 않은 다른 멤버 함수도 호출이 금지된다.

     이 함수의 리턴값을 변경하는 것도 막기 위해 멤버 변수를 포인터로 리턴하는것도 금지된다. 

     멤버 변수의 포인터를 리턴하기 위해선 리턴 값도 const 로 선언하면 가능하다.


예제8) const static

     값 변경이 불가능한 정적 상수 static int의 상수

     const static int val = 5;           // const static int 형 val

     반대로 static const int = 5; 와 같이 사용하는 것도 가능하다.
     
     int 형이 const(상수), const int 형이 static(정적) 변수다.
     


























      C++  |  2014. 4. 22. 16:53



홍쿤사마's Blog is powered by Daum