为什么抛出表达?

Alw*_*ing 17 c++

以下文章讨论了throw表达式的类型:在C++中,如果throw是一个表达式,它的类型是什么?.我想澄清一个更基本的问题:为什么应该throw是一个表达式而不是一个(非表达式)语句就像return在第一个位置一样?我的意思是,有人想写点什么auto x = throw std::runtime_error("Error message")吗?

Que*_*tin 11

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

return success()
    ? computation()
    : throw std::runtime_error("oops");
Run Code Online (Sandbox Code Playgroud)

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

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

  • *"注意:这可能会或可能不会在代码混淆之外使用."*这是C++ 11 constexpr函数中的一项重要技术.那些可能只包含一个return语句(加上声明),因此if语句通常由三元运算符替换.请注意,constexpr函数中允许抛出异常; 如果在编译时调用throw,编译器将报告错误(这是您想要的). (2认同)