std :: logic_error而不是return false

Abr*_*ile 5 c++ validation exception-handling

我正在寻找某人对使用的看法,std::logic_error而不是使用嵌套的if/elseif的复杂列表返回true/false.

我想从许多类似的功能中移动,如下所示

bool validate_data(){
    std::vector<int> v; 
    //fill with data
    if( v.find(10) == v.end() ){
       return false;
    } 
    // other checks that return false
}
Run Code Online (Sandbox Code Playgroud)

bool validate_data(){
    std::vector<int> v; 
    //fill with data
    if( v.find(10) == v.end() ){
       throw std::logic_error("error message");
    } 
    // other checks that return false
}
Run Code Online (Sandbox Code Playgroud)

并在一个try-catch块中调用所有这些函数列表.

既然它来自std::exception可能我不知道它是不是一个好主意.

是否有人使用如下例子?

非常感谢

AFG

Pat*_*ick 5

仅在特殊情况下使用例外.

是不是发现价值10是一种特殊情况?还是只是一个正常的情况?

将您的方法从validate_data重命名为is_data_valid使其更清晰.如果方法返回true,则它是有效的.如果它返回false,则不是.不需要为此使用例外.


Den*_*nis 5

您应该仅在特殊情况下使用例外.当真实或错误的可能性非常重要时,使用(和检查)返回值会更有效.只有当投掷的机会太小而不能超过返回值检查的成本时,例外才会更有效.

因此,如果无效数据的可能性非常低,那么请使用例外.否则,当前的解决方案不仅应该是好的,而且还应该稍微更高效(因为投掷和处理相对昂贵).