이것은 더블 뱅 트릭 의 예일 수 있습니다 . 자세한 내용 은 The Safe Bool Idiom 을 참조하세요. 여기에 기사의 첫 페이지가 요약되어 있습니다.
C ++에는 클래스에 대한 부울 테스트를 제공하는 여러 가지 방법이 있습니다.
분명한 방법은 operator bool
변환 연산자입니다.
// operator bool version
class Testable {
bool ok_;
public:
explicit Testable(bool b=true):ok_(b) {}
operator bool() const { // use bool conversion operator
return ok_;
}
};
수업을 테스트하고
Testable test;
if (test)
std::cout << "Yes, test is working!\n";
else
std::cout << "No, test is not working!\n";
그러나 opereator bool
이 같은 무의미한 작업 할 수 있기 때문에 안전하지 않은 것으로 간주됩니다 test << 1;
또는 int i=test
.
operator!
암시 적 변환이나 과부하 문제를 방지하기 때문에 사용하는 것이 더 안전합니다.
구현은 간단합니다.
bool operator!() const { // use operator!
return !ok_;
}
Testable
객체 를 테스트하는 두 가지 관용적 방법 은 다음과 같습니다.
Testable test;
if (!!test)
std::cout << "Yes, test is working!\n";
if (!test2) {
std::cout << "No, test2 is not working!\n";
첫 번째 버전 if (!!test)
은 일부 사람들이 더블 뱅 트릭 이라고 부르는 것 입니다 .