Переверните вопрос.Почему бы это не было const?
Если бы это было "char * what () const", вы могли бы изменить внутренний массив символов, на который what () возвращает указатель.Было бы поразительно глупо для exception () позволять произвольному коду манипулировать своими внутренними буферами таким образом, так что what () возвращает const char * вместо char *.
И если бы это было "const char * what () ", без квалификатора const, это будет означать, что вызов what () изменит внутреннее состояние исключения.Что это не так, и чего вы не ожидаете от этого.
Итак, мы имеем то, что имеем, «const char * what () const».Константная функция, возвращающая указатель на константный массив.И в результате вы можете вызвать его по константной ссылке.Обычно это исключения.
В конце концов, вы обычно не меняете исключения, вы создаете их, бросаете их, а затем управляющий код манипулирует ими, не изменяя их.Таким образом, их функции-члены должны быть постоянными.