以下文章讨论了throw
表达式的类型:In C++, if throw is an expression, what is its type?。我想澄清一个更基本的问题:为什么throw
应该是一个表达式而不是(非表达式)语句,就像return
一样?我的意思是,有人想写一些像auto x = throw std::runtime_error("Error message")
吗?
答案 0 :(得分:11)
如果throw
是一个声明,则您无法将其与条件运算符一起使用。
return success()
? computation()
: throw std::runtime_error("oops");
注意:这可能会或可能不会在代码混淆之外使用。
编辑:一个有用的案例是C ++ 11的严格constexpr
函数,它们只能包含一条指令。感谢@dyp的洞察力!