"부울로 변환 가능"은 부울 문맥에서 의미있게 사용할 수있는 모든 것을 의미합니다 (예 : if
조건). 이는 암시 적 변환에서 의미가 있습니다. 부울 컨텍스트에서 사용하려는 객체를 상상해보십시오. std::fstream
: 여기
ifstream ifs("filename");
while (ifs >> token)
cout "token " << token << " read." << endl;
, ifs
는 불리언으로 전환된다. 음, 실제로는 그렇지 않습니다. 오히려, 그것은 무언가로 변환 될 수 있고, 차례로 bool
으로 변환 될 수 있습니다. 여기에는 문을 방지하는 것입니다 :
int b = ifs;
추론은 명령문이 대부분의 아마 것은 아니다 컴파일러 따라서이를 방지해야한다는 것입니다. bool
대신 "bool로 변환"을 반환하면 한 표현식에서 두 개의 사용자 정의 암시 적 변환을 연결할 수 없으므로 이렇게됩니다.
이 문맥에서는 safe bool idiom을 찾아 볼 수 있습니다. Chris는 이미 반환 유형으로 void*
을 사용하여 가능한 구현을 암시했습니다. 일반적으로 포인터 은 true
을 나타내는 데 사용됩니다. 이것은 STL에서 사용하는 것입니다. 그러나 이것은 불행히도 여전히 결함이 있습니다. 몇 가지 대안이 제안되었습니다 (위에서 링크 된 기사에서 깔끔하게 정리되었습니다). 그리고 내가 아는 한, 고려 대상으로 C++ 0x에도 포함되었습니다. 그러나 나는이 제안의 현재 상태를 알지 못한다.
그건 제가 찾을 수 없었던 기사입니다. 감사! –
현재 상태는 명시 적 변환 연산자이며 안전 bool 관용구를 불필요하게 만듭니다. –
@Sebastian, 맞습니까? "if (f)"가 명시 적 연산자 bool()을 호출하거나 "if (bool (f))"가 필요합니까? 표준이 bool 인 경우 매개 변수를 정의하는 것과 같지 않고 단순히 bool로 변환 할 수 없습니다. – jmucchiello