c ++: странный синтаксис в методе what () std :: exception - PullRequest
3 голосов
/ 25 мая 2010

Когда я наследую от std::exception, чтобы определить свой собственный тип исключения, мне нужно переопределить метод what(), который имеет следующую подпись:

virtual const char* what() const throw();

Это определенно выглядит странно, как если бы в подписи было два имени метода. Это какой-то очень специфический синтаксис, как с чисто виртуальными методами, например:

virtual int method() const = 0;

или это особенность, которую можно каким-то образом использовать и в другом контексте? И если да, то для чего он может быть использован?

Ответы [ 3 ]

12 голосов
/ 25 мая 2010

Это называется exception specifications. throw() не позволяет выбрасывать какие-либо исключения изнутри этого метода throw(int) допускает только исключения типа int.

Спецификации исключений будут отброшены в C ++ 0x. Это дает очень хорошее объяснение причин.

1 голос
/ 25 мая 2010
virtual const char* what() const throw();

what() - это метод виртуальной константы, который возвращает указатель на const char и не должен вызывать никаких исключений. Не очень странное объявление метода:)

0 голосов
/ 02 сентября 2014

В ios_base определяется тип исключения failure. Он служит базовым классом для типов исключений, которые могут быть сгенерированы системой ввода-вывода.

наследует exception.

Класс failure имеет следующий конструктор:

explicit failure(const string &str);

Здесь str - это сообщение, описывающее ошибку.

Это сообщение можно получить из объекта failure, вызвав его функцию what(), показанную здесь:

virtual const char *what( ) const throw( );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...