2011-10-26 1 views
2

을 만드는 의도는 무엇 함수 "CONST"이처럼

bool isEmpty() const { return root==NULL; } 

은 IsEmpty 함수 기능, 테스트입니다.

+0

http://www.fredosaurus.com/notes-cpp/oop-memberfuncs/constmemberfuncs.html – bjarneh

답변

10

이는 함수가 해당 클래스의 멤버를 수정하지 않음을 나타냅니다.

일반적으로 인터페이스/선언 (헤더 파일을 통해)은 구현이 아닌 클래스/함수 사용자가 사용할 수 있습니다. 따라서 const은 함수가 멤버를 수정하지 않는다는 것을 사용자에게 분명히합니다. 또한 object.You 해당 클래스의 const 객체에 일반 멤버 함수를 호출 할 수있는 const가있을 때이 const 멤버 함수가 사용되어야한다는 것을 인식 기능의 사용자를 만드는 const 추가

, 그것은 컴파일러가 발생합니다 오류.

그 이유는 기능이 비어 있어도 const으로 표시되어 있기 때문입니다. 함수 구현 자와 함수 사용자 간의 계약을 나타냅니다.

+3

또한 const 버전의 개체가 있으면 호출 할 수 있습니다. 비 const 함수는 const 인스턴스에서 호출 할 수 없습니다. – rerun

+2

@Als 당신은 'const 멤버 함수는 해당 클래스의 const 개체에서만 호출 할 수 있습니다'라고 말하고 있습니다. 그건 사실이 아닙니다 : const 멤버 함수도 const가 아닌 객체에서 호출 될 수 있습니다 :) 그러나 다른 방법은 가능하지 않습니다. –

+0

@TomKnapen : 아, Ofcourse, 영어는 때때로 트릭을 재생할 수 있습니다 (특히 나 같은 비영어권 사용자에게) :). 감사합니다. 오타를 바로 잡았습니다. –

0

이 함수는 클래스의 상태를 수정하지 않는다고 컴파일러에 알립니다. 또한 const 함수는 const 개체에서 호출 할 수있는 유일한 함수입니다.

2

함수가 const으로 표시된 경우 해당 클래스의 const 인스턴스에서 함수를 호출 할 수 있습니다. const 개체에서 const이 아닌 함수를 호출하면 컴파일 타임 오류가 발생합니다.

기본적으로 개체 상태를 변경하지 않는 모든 기능을 const으로 표시하려고합니다. 이 방법을 사용하면 const을 불변 선언으로 사용할 수 있으며 컴파일러는 const 함수 만 호출 할 수 있는지 확인하여이를 적용합니다.

const 인스턴스에서 const 함수를 호출 할 수 있습니다.

0

이것은 함수가 논리적으로 일정하다는 것을 나타냅니다. 즉, 클래스의 사용자에 관한 한 클래스 멤버의 값은 함수에 의해 변경되지 않습니다. const 참조 및 const 포인터를 통해 const 함수를 호출하는 것은 합법적입니다.