Назад к вопросам
JuniorТеорияЧасто
Что выведет программа?
#include <iostream>
struct Error {
virtual int code() const { return 1; }
};
struct NotFound : public Error {
int code() const override { return 404; }
};
int main() {
try { throw NotFound{}; } catch (Error e) { std::cout << e.code() << ' '; }
try { throw NotFound{}; } catch (const Error& e) { std::cout << e.code(); }
}1 404
- Ждать
404 404:catch (Error e)копирует только частьErrorброшенногоNotFound, иcode()вызывается у обычногоError. - Ждать
1 1:const Error& eссылается на сам брошенныйNotFound, и виртуальный вызов через эту ссылку выполняетNotFound::code.
- Почему GCC с флагом
-Wallпредупреждает оcatch (Error e)? - Почему бросают сам объект исключения, а не указатель на него?