most/all try-catch 示例仅对 throw 语句使用 void-sub-functions 是有原因的吗

is there a reason that most/all try-catch examples are only using void-sub-functions for the throw statement

在大多数 C++ 实现中,我在 try-except 和 throw 语句中看到这样的示例代码(未针对编译进行测试):

void subfunction(int a)
{
  throw;
}
void function(int a)
{
  try
  {
    subfunction(a)
  }
  catch(...)
  {
  }
}

我现在想知道是否有任何充分的理由说明为什么 function()subfunction() 的等价物(几乎)总是在这个样本中实现为这个样本中的空白。对于提到的三个特殊 c++ 关键字是否有特定原因或影响? "function is missing a return statement"、"not all control paths return a value" 和 likes 等警告的含义是什么?关键字 "throw" 是否在某处内部标记为 noreturn 或类似的(对于某些编译器可以在 "exit()" 上找到)?

PSI 我目前正在使用 MSVC 的 MSVS 2012,但我也在使用其他编译器,例如各种当前版​​本的 GNUC。

throw 可用于非 void-function.

throw "has" noreturn 属性因此对于类似于 [=14] 的代码不应引发关于 "not all control paths return a value" 的警告=]

double my_div(double a, double b)
{
    if (b == 0.) {
         throw std::runtime_error("division by zero");
         // No warning here
    } else {
         return a / b;
    }
}