Что означает объявление этой функции в С++

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

}

AFAIK это функция, которая вернет постоянный указатель на изменяемый char. В остальном я не уверен. Может ли кто-нибудь помочь?

Ответы

Ответ 1

Относительно части const throw():

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

Ответ 2

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

проверьте спецификации исключений в C++ и обратите внимание, что они устарели в C++ 0x :)

Ответ 3

Слева направо:

  • virtual - эта функция может быть переопределена в производных классах
  • const char* - эта функция возвращает изменяемый указатель на константу (массив) char
  • what() - эта функция не принимает параметров
  • const - эта функция не изменяет (не mutable) членов объекта, на который она вызвана, и, следовательно, может быть вызвана в const экземплярах своего класса
  • throw() - эта функция не должна выбрасывать какие-либо исключения. Если да, то будет вызываться unexpected.

Ответ 4

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

Ответ 5

функция what() не принимает параметров, возвращает pointer в const char (поэтому вы не можете изменить то, на что указывает указатель, но вы можете изменить сам указатель). Это virtual, поэтому его поведение может быть переопределено в производных классах. Он не будет генерировать исключения. Он не изменяет никаких членов класса, к которому он принадлежит.

Ответ 6

Это виртуальная функция, которая возвращает const char *. const в конце метода означает, что ему не разрешено изменять состояние объекта, на который он вызван. Это означает, что не допускается изменять любые переменные-члены объекта. throw() part - это спецификация исключения, в которой говорится, что метод не вызывает никаких исключений.

Ответ 7

  • virtual: Это означает, что функция может быть переопределена в подклассах, а вызовы метода с помощью указателя базового класса в конечном итоге вызовут повторную реализацию.

  • const char * не является постоянным указателем на изменяемый char - он наоборот.

  • const означает, что этот метод можно даже вызвать в экземплярах const этого класса.

  • throw() означает, что этот метод не даст никаких исключений.

Ответ 8

Он фактически возвращает изменяемый указатель на константный блок символов.

Остальное уже объяснено другими.

Ответ 9

Относительно const после функций: действительно есть два значения, что компилятор понимает, и что обычно соглашения о программировании делают это означающим. Что касается компилятора все, что он делает, это сделать указатель указателем на Уст. Константа может быть отброшена, или различные направления используется для изменения наблюдаемого состояния объекта. В конце, эта константа означает, что программист хочет, чтобы она имела в виду.

Обычное соглашение, сегодня, состоит в том, что это означает, что наблюдаемое состояние объекта не изменится. Для некоторых разумное определение "наблюдаемого состояния".

Что касается спецификации исключения: пустое исключение спецификация не является гарантией броска, и очень важна при рассмотрении безопасности исключений. Следующая версия стандарт имеет устаревшие спецификации исключений, но он предоставить некоторые другие средства для указания того, что функция будет никогда не бросайте.

Ответ 10

  1. virtual этот используется для переопределения в производном классе от базового класса
  2. const char* Это указатель на постоянный символ
  3. what Возвращает последовательность символов с нулевым символом в конце, которая может использоваться для идентификации любого исключения
  4. Параметр throw() внутри throw пустой, поэтому он вызовет std :: неожиданно для всех исключений
#include<iostream>
#include<exception>

class Myexception:public exception
{
    virtual const char* what() const throw()
    {
        return "My exception here";
    }
} myex;

int main()
{
    try() 
    {
        throw myex;
    }
    catch(exception &e)
    {
        cout<<e.what()<<endl;
    }

    return 0;
}

Ответ 11

Базовый класс для всех исключений библиотек.

Это базовый класс для всех исключений, создаваемых стандартной библиотекой, и некоторыми языковыми выражениями. Вы можете получать собственные классы исключений или использовать другую иерархию или бросать неклассические данные (например, базовые типы).