В унаследованном коде 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
и вы вызываете свою функцию, вы никогда не узнаете, «успешно» или нет.
Имейте в виду, что тело функции может быть изменить в будущем, и когда вам вдруг понадобится вернуть ошибку, вы должны обновить вызовы, чтобы правильно обрабатывать ошибки.