2012-12-09 8 views
3

operator bool()을 오버로드했습니다. operator !()도 너무 많이로드해야합니까? 언제, 왜. 도와 주셔서 감사합니다.C++ 연산자 오버로딩, 연산자 bool() 및 연산자!()

+0

어쩌면 하나 이상의 사용자 정의 변환이있을 수 있지만 그렇게하지 않으면 쉽게 수정됩니다. – chris

+1

이 스택 오버플로 질문과 대답을 참조하십시오. http://stackoverflow.com/questions/4600295/what-is-the-meaning-of-operator-bool-const-in-c –

+1

연산자 bool 및 연산자 사용에 대한이 기사! 도움이 될 수도 있습니다. http://www.artima.com/cppsource/safebool.html –

답변

6

개발자가 !myobject을 말할 수 있도록하려면 operator!()을 구현해야합니다. 여기서 myobject은 클래스의 인스턴스입니다.

섹션 13.3.1.2는 지정하는 사용자 정의 형식

하는 내장 후보 포함 13.6에서 네드 후보 연산자 함수 드 인터넷의 모든 비교 것을의 목적으로 단항 연산자를 적용 할 때

  • 가 동일한 오퍼레이터 이름이, 주어진 연산자 및
  • 피연산자의 동일한 수를 수용하고
  • 것은 피연산자 동의 주어진 피연산자가 13.3.3.1 및
  • 에 따라 변환 될 수있는 유형은 비 템플릿 비회원 후보와 동일한 parameter-type-list를 갖지 않습니다.

그래서 컴파일러는 bool operator!(bool) 내장 및 사용자 정의 변환을 사용할 수 있지만 당신의 operator bool() 암시 적으로 호출 할 경우에만. operator bool()은 거의 항상 임의의 정수 컨텍스트에서 사용되지 않도록 명시 적으로 지정됩니다. 여러 개의 사용자 정의 변환은 주석에 언급 된 chris와 같이 내장 후보 연산자 사이에 모호성을 만들 수 있습니다.

따라서 operator!()을 직접 정의하는 것이 가장 좋습니다.

+0

아주 좋습니다. 감사. –

+0

thx @leftroundabout, 나는 형식을 엉망으로 만들고 심지어 알지도 못했다. –