Я создал свой класс MyException
class MyException: public std::exception
{
private:
std::string msg;
public:
MyException(std::string msg): std::exception(msg)
{
}
};
Пример взят из интернета, но у меня ругается компилятор (gcc) на строчку std::exception(msg)
note: candidate: 'constexpr std::exception::exception(const std::exception&)'
no matching function for call to 'std::exception::exception(std::__cxx11::string&)'
MyException(std::string msg): std::exception(msg){
no known conversion for argument 1 from 'std::__cxx11::string' {aka 'std::__cxx11::basic_string<char>'} to 'const std::exception&'
После нашел другой пример
class MyException: public std::exception
{
private:
public:
MyException(std::string msg);
~MyException() = default;
const char* what() const noexcept override;
};
Тут все работает, но у меня есть пару вопросов:
- Почему я не могу реализовать первый пример, хотя у другого человека получилось? (c++11)
- Почему в строчке const char(указатель) what() const noexcept override; используется последовательность const noexcept override;? Почему я не могу написать просто noexcept override или просто override. Насколько я знаю noexcept не позволяет выбросить исключение. И почему используется два раза const? Мы же уже указали, что функция будет константная

const(применительно к методу) используется один раз,constиnoexceptс недавних пор являются частью сигнатуры. – user7860670 Apr 19 '22 at 13:11