Что означает объявление этой функции в С++
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
-
virtual
этот используется для переопределения в производном классе от базового класса -
const char*
Это указатель на постоянный символ -
what
Возвращает последовательность символов с нулевым символом в конце, которая может использоваться для идентификации любого исключения - Параметр
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
Базовый класс для всех исключений библиотек.
Это базовый класс для всех исключений, создаваемых стандартной библиотекой, и некоторыми языковыми выражениями. Вы можете получать собственные классы исключений или использовать другую иерархию или бросать неклассические данные (например, базовые типы).