在传递给库函数之前检查值是否更好,或者捕获抛出的异常?

Neo*_*ana 6 c++ exception-handling

假设我正在使用一个具有to_int带字符串参数的函数的库.如果字符串是数字的字符表示,则此函数返回int,例如"23"将返回23.如果字符串不是数字,则抛出一个std::runtime_error.是否会更好:

if(is_all_digits(str))
    x = to_int(str);
else
    output("not an int, idiot. Try again");
Run Code Online (Sandbox Code Playgroud)

要么

try 
{
    x = to_int(str);
}
catch(...)
{
    output("not an int, idiot. Try again");
}
Run Code Online (Sandbox Code Playgroud)

cri*_*llo 0

如果捕获的异常确实是特定的,那么您可以使用特定的 try catch (使用通用的 try catch 不是一个好主意,因为您隐藏了一堆其他可能的错误)

一般来说,我的偏好是在将字符串传递给函数之前检查该字符串。