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붙이는 경우
클래스의 모든 멤버 변수를 변경 할 수 없다