토막숏 폼 블로그

맨날 헷갈리는 C++ Const

Pointer

  • * 왼쪽에 const가 있으면 값을 고정합니다.
  • * 오른쪽에 const가 있으면 주소를 고정합니다.
  • const int*int const*는 같습니다.
int main() {
	int num1 = 10;
	int num2 = 20;

	const int* a = &num1;
	int const* b = &num1;
	int* const c = &num1;
	const int* const d = &num1;
	int const* const e = &num1;

	a = &num2;
	b = &num2;
	//c = &num2; // error
	//d = &num2; // error
	//e = &num2; // error

	//*a = 30; // error
	//*b = 30; // error
	*c = 30;
	//*d = 30; // error
	//*e = 30; // error

	return 0;
}

Member Function and Variable

  • 맴버 함수가 해당 객체의 상태를 변경하지 않는다면 const로 표시합니다.
  • const 오브젝트는 non-const 맴버 함수를 사용할 수 없습니다.
  • const 오브젝트도 mutable 하거나 인터 멤버를 통해 접근하는 객체에 대해서는 값 수정이 가능합니다.
class Point {
	int x, y, i;
	mutable int j;
public:  
    // int getx() { return x;} 		// error
    int getx() const { return x;}  
	
	void f() const {
		// i++;						// error
		j++;
	}
};

void f1(const Point& pt) {  
    int x = pt.getx(); 
}

기타

  • const 속성을 타 변환을 통해 해지하는 방법은 가능한 피하는 것이 좋습니다. 라이브러리 안에 들어있어 직접 수정할 수 없다든가 하는 이유로 사용하는 임시방편입니다.
  • const 는 성능상의 이유가 아닌, 유지 보수를 위해 사용합시다. const는 코드의 가독성을 높히고, 의도하지 않은 동작으로 인한 에러를 방지합니다.

Reference

당겨서 다음 글 보기

프로필 사진

작성자

0