«преобразуемый в bool» означает просто все, что может быть использовано в логическом контексте (например, в условии if
). Это имеет смысл в неявных преобразованиях. Представьте себе объект, который вы хотите использовать в логическом контексте, например, std::fstream
ifstream ifs("filename");
while (ifs >> token)
cout "token " << token << " read." << endl;
Здесь ifs
конвертируется в логическое значение. Ну, на самом деле это не так. Скорее, оно конвертируется во что-то, что, в свою очередь, конвертируется в bool
. Это для предотвращения таких заявлений:
int b = ifs;
Причина в том, что такое утверждение, скорее всего, не предназначено, и поэтому компилятор должен его предотвратить. Возвращая «Convertible to Bool» вместо bool
, это достигается потому, что два пользовательских неявных преобразования не могут быть связаны в одном выражении.
В этом контексте вы, возможно, захотите найти идиому safe bool . Крис уже упоминал об одной возможной реализации, используя void*
в качестве возвращаемого типа. Обычно указатель this
используется для представления true
. Это то, что используется STL. Тем не менее, это, к сожалению, все еще ущербно. Было предложено несколько альтернатив (аккуратно обернутых в статье, которую я связал выше), и, насколько я знаю, они также были включены в C ++ 0x для рассмотрения. Я не знаю о текущем статусе этих предложений, однако.