Если кто-то унаследовал от std :: exception и переопределил, что возвращать NULL, то это возможно.
class CMyException : public std::exception
{
...
virtual const char * what () const {return NULL;}
};
Несмотря на отличную находку Нейла в стандарте, все равно было бы неплохо проверить на NULL. Хотя спецификации того, какие дочерние классы std :: exception указывают, что они не должны возвращать NULL, ничего в вашем компиляторе не будет обеспечивать это, и приведенный выше код все равно будет допустимым в соответствии с языком.
Это может быть идеальная ситуация, чтобы использовать assert ...
assert(except.what() != NULL);
или
if (except.what() != NULL)
{
... normal processing ...
}
else
{
assert(false);
}
потому что это тот случай, когда что-то, вероятно, никогда не должно происходить, и вы предполагаете, что этого не должно происходить, но все же хотели бы знать (в режиме отладки), когда ваши предположения оказываются неверными. Затем вы можете обратиться к неверному предположению или к неверному коду, который может противоречить вашему предположению (убедитесь, что what () не возвращает NULL).