virtual const char* what() const throw()
{
}
AFAIK это функция, которая вернет постоянный указатель на изменяемый char. В остальном я не уверен. Может ли кто-нибудь помочь?
virtual const char* what() const throw()
{
}
AFAIK это функция, которая вернет постоянный указатель на изменяемый char. В остальном я не уверен. Может ли кто-нибудь помочь?
Относительно части const throw()
:
const
означает, что эта функция (которая является функцией-членом) не изменяет наблюдаемое состояние объекта, на который он вызван. Компилятор принудительно применяет это, не позволяя вам вызывать методы не const
из этого и не позволяя изменять значения членов.throw()
означает, что вы обещаете компилятору, что эта функция никогда не позволит испускать исключение. Это называется спецификацией исключения, и (длинный короткий рассказ) бесполезен и, возможно, вводит в заблуждение. Это означает, what
это виртуальная функция-член, возвращающая const char*
которая может быть вызвана для const-объектов (const в конце). throw()
означает, что это своего рода гарантия не бросать ничего.
проверьте спецификации исключений в C++ и обратите внимание, что они устарели в C++ 0x :)
Слева направо:
virtual
- эта функция может быть переопределена в производных классахconst char*
- эта функция возвращает изменяемый указатель на константу (массив) charwhat()
- эта функция не принимает параметровconst
- эта функция не изменяет (не mutable
) членов объекта, на который она вызвана, и, следовательно, может быть вызвана в const
экземплярах своего классаthrow()
- эта функция не должна выбрасывать какие-либо исключения. Если да, то будет вызываться unexpected
.виртуальная функция, возвращающая указатель на немодифицируемый буфер символов, без аргументов, не изменяет какие-либо переменные-члены класса, принадлежит (т.е. может быть вызвана в экземплярах const), и не будет бросать какой-либо вид исключения.
функция what()
не принимает параметров, возвращает pointer
в const char
(поэтому вы не можете изменить то, на что указывает указатель, но вы можете изменить сам указатель). Это virtual
, поэтому его поведение может быть переопределено в производных классах. Он не будет генерировать исключения. Он не изменяет никаких членов класса, к которому он принадлежит.
Это виртуальная функция, которая возвращает const char *. const
в конце метода означает, что ему не разрешено изменять состояние объекта, на который он вызван. Это означает, что не допускается изменять любые переменные-члены объекта. throw()
part - это спецификация исключения, в которой говорится, что метод не вызывает никаких исключений.
virtual
: Это означает, что функция может быть переопределена в подклассах, а вызовы метода с помощью указателя базового класса в конечном итоге вызовут повторную реализацию.
const char *
не является постоянным указателем на изменяемый char - он наоборот.
const
означает, что этот метод можно даже вызвать в экземплярах const этого класса.
throw()
означает, что этот метод не даст никаких исключений.
Он фактически возвращает изменяемый указатель на константный блок символов.
Остальное уже объяснено другими.
Относительно const после функций: действительно есть два значения, что компилятор понимает, и что обычно соглашения о программировании делают это означающим. Что касается компилятора все, что он делает, это сделать указатель указателем на Уст. Константа может быть отброшена, или различные направления используется для изменения наблюдаемого состояния объекта. В конце, эта константа означает, что программист хочет, чтобы она имела в виду.
Обычное соглашение, сегодня, состоит в том, что это означает, что наблюдаемое состояние объекта не изменится. Для некоторых разумное определение "наблюдаемого состояния".
Что касается спецификации исключения: пустое исключение спецификация не является гарантией броска, и очень важна при рассмотрении безопасности исключений. Следующая версия стандарт имеет устаревшие спецификации исключений, но он предоставить некоторые другие средства для указания того, что функция будет никогда не бросайте.
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;
}
Базовый класс для всех исключений библиотек.
Это базовый класс для всех исключений, создаваемых стандартной библиотекой, и некоторыми языковыми выражениями. Вы можете получать собственные классы исключений или использовать другую иерархию или бросать неклассические данные (например, базовые типы).