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;
}
}
在大多数 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;
}
}