C ++使用HRESULT返回S_OK

时间:2015-09-15 23:23:19

标签: c++ hresult

在我正在处理的遗留C ++代码中,我注意到许多返回HRESULT的方法遵循将局部变量设置为S_OK的做法,然后在方法结束时将其返回而不更改它。

    HRESULT function()
    {
        HRESULT hr = S_OK;
        // do some stuff
        // none of which changes hr
        ...
        return hr;
    }

以上代码有什么好处吗?或者我可以安全地将其重构为

    void function()
    {
        // do some stuff
        // none of which changes hr
        ...
    }

2 个答案:

答案 0 :(得分:3)

你提出的重构应该可以正常工作。请注意,如果代码中有任何使用函数返回值的位置,则会出现编译错误,您将不得不修复这些位置。

另请注意,在将来的代码版本中,为该函数添加错误案例会更加困难,因为您必须重新引入返回值并更改所有调用者。最初的开发人员可能会因为一致性而感到返回S_OK,或者预期该函数可能会在某一天产生错误。

答案 1 :(得分:0)

如果您的函数始终成功(或者换句话说永远不会执行失败的事情),您可以摆脱它。所以它取决于内容和你的功能。如果你切换到void并且你打电话给你的功能,你永远不会知道呼叫是否“成功”。

请记住,函数的正文可能将来发生更改,当您突然需要返回错误时,您必须更新调用以正确处理错误。