为什么抛出表达?

时间:2015-07-03 07:32:09

标签: c++

以下文章讨论了throw表达式的类型:In C++, if throw is an expression, what is its type?。我想澄清一个更基本的问题:为什么throw应该是一个表达式而不是(非表达式)语句,就像return一样?我的意思是,有人想写一些像auto x = throw std::runtime_error("Error message")吗?

1 个答案:

答案 0 :(得分:11)

如果throw是一个声明,则您无法将其与条件运算符一起使用。

return success()
    ? computation()
    : throw std::runtime_error("oops");

注意:这可能会或可能不会在代码混淆之外使用。

编辑:一个有用的案例是C ++ 11的严格constexpr函数,它们只能包含一条指令。感谢@dyp的洞察力!