C++ 为什么是抛表情?

C++ 为什么是抛表情?,c++,C++,下面的帖子讨论了抛出表达式的类型:。我想澄清一个更基本的问题:throw为什么应该是一个表达式而不是一个(非表达式)语句,就像return一样?我的意思是,是否有人想编写类似于auto x=throw std::runtime\u error(“错误消息”)?如果throw是一条语句,则不能将其与条件运算符一起使用 return success() ? computation() : throw std::runtime_error("oops"); 注意:这可能有也可能没有代

下面的帖子讨论了
抛出
表达式的类型:。我想澄清一个更基本的问题:
throw
为什么应该是一个表达式而不是一个(非表达式)语句,就像
return
一样?我的意思是,是否有人想编写类似于
auto x=throw std::runtime\u error(“错误消息”)

如果
throw
是一条语句,则不能将其与条件运算符一起使用

return success()
    ? computation()
    : throw std::runtime_error("oops");
注意:这可能有也可能没有代码混淆之外的用途


编辑:C++11的strict
constexpr
函数中有一个很有用的例子,它只能包含一条指令。感谢@dyp的洞察力

另一个+1的说明,我将感谢有人评论。看起来我不能投票两次:(加上一次,尽管值得注意的是,
throw std::runtime_error(“oops”)
是一个类型为
void
的表达式,由于一些技术上的诡计,它只能在条件中工作,这会阻止我自己回答这个问题。@MeirGoldenberg逗号运算符计算并丢弃它的左操作数,然后计算并返回它的右操作数。在这里,它每次都会抛出异常,所以这不是r这是C++11 constexpr函数中的一项重要技术。这些函数可能只包含一个返回语句(加上声明),因此if语句通常由三元运算符替换。请注意,在constexpr函数中允许抛出异常;如果在编译时调用抛出,编译器将报告错误(这是您想要的).另一方面,
throw
作为一个表达式早于
constexpr
。因此,我不确定能够将
throw
放入条件语句中是否足以作为动机。