Если это НЕ МОЖЕТ произойти в производстве (но может произойти во время разработки), я использую assert
:
Если это НЕ ДОЛЖНО произойти в производстве, но, возможно, это может произойти, я либо верну ошибку , либо сгенерируем исключение .
Кстати, вот небольшой хитрость в C ++, которую я где-то подхватил; поскольку многие макросы ASSERT отображают свое выражение в окне сообщения, если утверждение неверно, вы можете использовать следующую форму для ветвей, которые никогда не должны выполняться:
if (person.IsMale())
{
AdmitEntranceToManCave();
}
else
{
ASSERT(!"A female has gotten past our defenses. EVERYBODY PANIC!");
}
Строковый литерал вычисляется по адресу (не NULL), который логически ИСТИНА. Таким образом, использование логического оператора NOT делает его ЛОЖНЫМ.