본문 바로가기

공부/c++

키워드 const사용법

반응형

c언어

칠 수 없는 값 고칠 수 있는 값

1) const 일반자료형 a; -> a가 상수화됬기 때문에 변경할 수가 없다.

2) const 포인터자료형 p=&a; -> 포인터 p가 가리키는 값(즉 *p)은 고칠 수가 없습니다.

하지만 p(포인터)와 a는 변수므로 고칠 수 있습니다. a는 어떤 값을 지칭하는 변수기 때문에 고칠수 있죠. p는 그 값을 지칭하는 변수의 주소인데 상수해주죠.

3) 포인터자료형 const p=&a; -> 포인터 p가 지니는 a의 주소 값(즉 p)은 고칠 수 없습니다. 하지만 *p는 고칠 수 있습니다.

4) const 포인터자료형 const p=&a; -> 포인터 p가 가리키는 값(즉 *p)포인터 p가 지니는 a의 주소 값(즉 p) 둘 다 고칠 수 없습니다.

5) 반환자료형 함수명(const 일반자료형 &ref); -> 이 함수 내에서 참조자 ref를 고칠 수 없습니다. (이건 C++ 내용이니깐 안 배우신분들은 스킵하셔도 됩니다.)

 

c++

1. 리턴타입에 const를 붙이는 것은

const char* GetName()

과 같은 경우인데

const를 안붙인다면 다음과 같은 이상동작 이 수행될 수 있기 때문에 리턴값을 바꾸지 말라는 제약을 설정하기 위해 사용합니다.

 

student me;

me.GetName() ="hahaha";   // 수행되나 이상동작

 

2. 파라미터에 const를 붙이는 것은

함수안에서 그 파라미터를 수정하지 못하도록 하는 제약을 설정합니다.

 

 

3. 멤버함수전체에 붙이는 경우

 int GetID() const
        {
            return id;
        }

는 멤버함수안에서 클래스의 모든 멤버 변수를 변경할 수 없다라는 제약을 설정하여

컴파일 시에 멤버함수내에서의 멤버변수 변경을 error처리합니다.

  int GetID() const
        {

           id=1;   // 컴파일 시 error
            return id;
        }

4. 클래스에 const붙이는 경우
클래스의 모든 멤버 변수를 변경 할 수 없다

반응형