1. 변수
|
const int i = 100; //i 값변경불가 |
2. 포인터형 : 기본적으로 2가지형태가 있을 수 있음. 그외 여러형태가 가능
예) 값은 변경 불가능하지만 주소는 변경가능한 형태
|
int temp = 100, temp2 = 200; const int *ipConst = &temp; // *ipConst 값변경불가, ipConst(주소)값은변경가능 // int const *ipConst = &temp; // 이런형태로써도위와같은의미 // *ipConst = 300; // 불가능한형태 ipConst = &temp2; // 가능한형태 |
예) 주소는 변경 불가능하지만 값은 변경가능한 형태
|
int temp = 100, temp2 = 200; int * const iConstp = &temp; // *iConstp 값변경가능, iConstp(주소)값은변경불가 *iConstp = 300; // 가능한형태 //iConstp = &temp2; // 불가능한형태 |
주의 : const가 결합되는 위치가 값인지 주소인지에 유의
3. 참조형
예) 직접적으로 값과 주소 모두 변경 불가능하지만 참조 원본을 통한 값변경은 가능한 경우
|
int temp3 = 100, temp5 = 200; int const &ircVal = temp3; //ircVal = 2000; // 컴파일에러발생(const 참조는값변경불가) //ircVal = temp5; // 주소도변경불가 temp3 = 9000; // 참조원본은변경가능, 결과적으로ircVal의값도변하게됨 |
예) 직접적으로 값과 주소 모두 변경 가능하지만 참조가 가르키는 값은 변화가 없는경우 (VS2008에서는 오래된 문법이라고 cosnt가 무시된다.)
|
|
4. 함수 : class의 멤버함수인 경우만 const 함수 사용가능. 해당 class의 멤버변수를 변경할수 없음.
|
class ConstTest { public: int m_iA; ConstTest() { m_iA = 1; } int const_func1( int &a_iA, int &a_iB) const { int a = 1; int b = 2; int c = 0; c = a + b; a_iA += 100; // m_iA += 100; // 에러발생. 멤버변수는변경불가 return m_iA; } }; |
5. 클래스
|
const CMyConstClass CC; // 내부멤버변수전체를변경불가능한클레스,(생성자함수만은예외) // 모든내부멤버함수는기본적으로const 함수가되야만함. // 내부함수의지역변수및인자로받은변수는변경가능. |
Junios World