본문 바로가기

ECIM list (Help!)

Const (한정자) 관련 질문입니다.

#include 

using namespace std;

class CObj
{
    private:
        const int m_iValue;
        const short m_sValue;

        int m_iTest;
    public:
        int*  GetTest(void) const                 //1번 함수
        {
            return &m_iTest;
        }

        int* const GetTest2(void)
        {
            return &m_iTest;                // 2번 함수
        }
};

int main(void)
{

    return 0;
}


1번 함수는 왜 오류가 나는 건가요??  그리고 nt*  const  GetTest(void)   이렇게도 되는데 

이건 무슨 의미 인가요???



 

 Const 선언의 위치는 알아보기 쉽게 맨 앞으로 해주세요 

 

1. int*  GetTest(void) const 
    이게 별로 좋은 선언 방법은 아닙니다 (엄밀히는 틀렸습니다.) Visual Studio 2015 컴파일러는 다행히 이것을 
    const  int*  GetTest(void)  와 동일하게 처리해주고 있습니다. 

    따라서, GetTest() 함수의 return 값으로 const int* 를 기대했는데, 보통의 int* 가 리턴이 되니까 컴파일 에러가 나는 겁니다. 

2. Test 2도 마찬가집니다. 가운데에 const가 들어간 경우에도  const  int*  GetTest(void) 와 동일하게 처리합니다. 
   이 내용은 제가 참고한 설명 링크에도 const의 위치에 따른 두가지 경우를 동일하게 언급이 있습니다. 
   
헛갈리게 짜는 건 무조건 잘못된 일입니다. const는 GetTest2() 처럼 정확한 위치에 두세요.