C++ 使用 HRESULT 到 return S_OK
C++ use of HRESULT to return S_OK
在我正在处理的遗留 C++ 代码中,我注意到许多 return HRESULT 遵循将局部变量设置为 S_OK,然后最后 return 的做法的方法而不改变它。
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
...
}
如果你的函数总是成功(或者换句话说永远不会执行失败的事情)你可以摆脱它。所以这取决于内容和你的功能。如果您切换到 void
并调用您的函数,您永远不会知道是否调用了 "succeeded"。
请记住,函数体 将来可能 发生变化,当您突然需要 return 一个错误时,您必须更新调用以处理错误正确。
您提议的重构应该可以正常工作。请注意,如果代码中有任何地方使用了函数的 return 值,您将遇到编译器错误,您将不得不修复这些地方。
另请注意,在代码的未来版本中,将更难向该函数添加错误情况,因为您将不得不重新引入 return 值并更改所有调用方。最初的开发者可能 return 编辑 S_OK
是出于一致性的考虑,或者是预期该功能有一天可能会产生错误。
在我正在处理的遗留 C++ 代码中,我注意到许多 return HRESULT 遵循将局部变量设置为 S_OK,然后最后 return 的做法的方法而不改变它。
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
...
}
如果你的函数总是成功(或者换句话说永远不会执行失败的事情)你可以摆脱它。所以这取决于内容和你的功能。如果您切换到 void
并调用您的函数,您永远不会知道是否调用了 "succeeded"。
请记住,函数体 将来可能 发生变化,当您突然需要 return 一个错误时,您必须更新调用以处理错误正确。
您提议的重构应该可以正常工作。请注意,如果代码中有任何地方使用了函数的 return 值,您将遇到编译器错误,您将不得不修复这些地方。
另请注意,在代码的未来版本中,将更难向该函数添加错误情况,因为您将不得不重新引入 return 值并更改所有调用方。最初的开发者可能 return 编辑 S_OK
是出于一致性的考虑,或者是预期该功能有一天可能会产生错误。