Это правило ставит вас в тупик, если вы когда-нибудь захотите использовать класс, который имеет неявное преобразование в bool
, например std::istream
. Этот код читает слово из файла за раз, пока не будет достигнут EOF:
std::ifstream file("foo.txt");
std::string word;
while (file >> word)
{
// do stuff
}
Оператор извлечения потока возвращает ссылку на файловый поток, который неявно преобразуется в bool
, чтобы указать, находится ли поток в хорошем состоянии. Когда вы дойдете до конца файла, тест не пройден. Ваш стандарт кодирования не позволяет использовать эту общую конструкцию.
Для типов указателей это не имеет большого значения. Компилятор, вероятно, выдаст примерно такой же код для неявного преобразования в bool
и явного теста против NULL
. Это вопрос вкуса - ни один из них не «лучше» в абсолютном смысле. Стандарт кодирования просто пытается обеспечить согласованный стиль.
Имея это в виду, вы должны строго соблюдать стандарт кодирования при работе со встроенными типами (указатели, целые и т. Д.). Если вы столкнетесь с ситуацией, аналогичной приведенной выше, с классом, имеющим законное преобразование в bool
, я бы поднял проблему с вашими товарищами по команде.