С ++ Синтаксис выбрасывания исключений - PullRequest
0 голосов
/ 13 ноября 2018

Я сейчас читаю книгу на C ++ и столкнулся с этим фрагментом кода, который я не знаю, как интерпретировать:

#include <exception>
#include <memory>
struct empty_stack: std::exception // don't know what the code after : means
{
     const char* what() const throw(); //don't understand this line either
};

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

struct empty_stack: std::exception // don't know what the code after : means

Это означает, что empty_stack публично наследует от std::exception, который является базовым классом для стандартных исключений.

Примечание: Если тип наследования не указан, тип наследования по умолчанию зависит от типа наследования. Это private, если тип наследования class и public, если тип наследования struct.

const char* what() const throw(); //don't understand this line either

Это означает, что what() - это функция, которая не изменяет неизменяемые члены класса, частью которого она является, и не вызывает никаких исключений. Но немного вводить в заблуждение throw() в конце означает, что он не бросает.

Итак, начиная с C ++ 11, мы имеем спецификатор noexcept. Использование этого в объявлении функции, подобном приведенному ниже, означает, что функция объявлена, чтобы не выдавать никаких исключений.

const char* what() const noexcept;

Примечание : throw() устарело и будет удалено в C ++ 20.

0 голосов
/ 13 ноября 2018
const char* what() const throw();
  • const char* означает, что метод возвращает указатель на const char, который является типичным типом строки в C (и C ++, для обратной совместимости)

  • what - это имя метода.

  • второй const означает, что методу не разрешено изменять какие-либо не изменяемые члены класса,или в принципе не разрешено изменять какой-либо элемент, если он не помечен как mutable

  • throw() означает, что методу разрешено выбрасывать «ничего», поэтому он не может выбрасывать.Это может быть связано с тем, что эта функция должна быть вашей последней линией защиты при возникновении исключения.Бросив в него исключение, мы победим цель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...