В общих обстоятельствах это не рекомендуется, а с C ++ 11 вообще не рекомендуется.
Причиной преобразования в void*
была поддержка синтаксиса, подобного
std::ifstream myStream;
if (myStream) {
}
if (!myStream) {
}
Здесь преобразование в bool
кажется более разумным, но приводит к таким странностям:
if (myStream == true) // ??
Преобразование в void*
препятствует тому, чтобы этот код был легальным, но открывает совершенно другойбанка червей, например
delete myStream; // ??
В C ++ 11, с возможностью иметь explicit operator bool()
в качестве функции-члена, этот взлом void*
не рекомендуется и не должен использоваться.Не используйте эту идиому.Если вам нужно что-то, чтобы вернуть bool
, пусть это вернет bool
.Если вам нужен объект, который можно преобразовать в bool
, используйте explicit operator bool
.
Надеюсь, это поможет!