В следующем сообщении рассматривается тип выражения throw
: В С++, если throw - это выражение, каков его тип?. Я хотел бы прояснить более основную вещь: почему throw
должно быть выражением, а не выражением (не-выражение), как, например, return
в первую очередь? Я хочу сказать, хотел ли кто-нибудь написать что-то вроде auto x = throw std::runtime_error("Error message")
?
Почему бросается выражение?
Ответ 1
Если throw
было выражением, вы не могли использовать его с условным оператором.
return success()
? computation()
: throw std::runtime_error("oops");
Примечание: это может иметь или не иметь использование внешней обфускации кода.
Изменить: один полезный случай находится внутри С++ 11 strict constexpr
функции, которые могут содержать только одну команду. Спасибо @dyp за понимание!