c++使用HRESULT返回S_OK

C++ use of HRESULT to return S_OK

本文关键字:OK 返回 使用 HRESULT c++      更新时间:2023-10-16

在我正在处理的遗留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
        ...
    }

您建议的重构应该可以正常工作。只要注意,如果代码中有任何地方使用了函数的返回值,就会出现编译错误,并且必须修复这些地方。

还要注意,在代码的未来版本中,将更难向该函数添加错误情况,因为您将不得不重新引入返回值并更改所有调用者。最初的开发人员返回S_OK可能是出于一致性的考虑,或者是预期该函数有一天可能会产生错误。

如果你的函数总是成功(或者换句话说永远不会执行失败的东西),你可以摆脱它。这取决于内容和函数的作用。如果您切换到void并调用您的函数,您将永远不会知道调用是否"成功"。

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