Компилятор не помечает неправильное возвращаемое значение для HRESULTC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Компилятор не помечает неправильное возвращаемое значение для HRESULT

Сообщение Anonymous »

Я только что потратил слишком слишком много времени, пытаясь понять, почему в следующем фрагменте кода метод ProcessEvent(), похоже, игнорирует переданное мной значение false для aInvokeEventHandler:

Код: Выделить всё

HRESULT
CEventManager::
Process(Event anEvent)
{
return (m_pPool->GetFsm()->ProcessEvent(anEvent), false);
}

// Definition of ProcessEvent()
HRESULT ProcessEvent(const Event& anEvent, bool aInvokeEventHandler = true);
Всякий раз, когда я нарушал метод ProcessEvent(), aInvokeEventHandler всегда был true, независимо от того, передал ли я false .

Коллега по работе указал мне, что значение false должно находиться внутри внутренних круглых скобок в строке возврата, вот так:

Код: Выделить всё

return m_pPool->GetFsm()->ProcessEvent(anEvent, false); // Corrected code
Как только я это увидел, я ударил себя ногой. Обнаружить это, очевидно, было сложнее, потому что первоначальный кодировщик использовал избыточные внешние круглые скобки в возвращаемой строке.

Мой вопрос: почему разве компилятор не уловил это за меня?

Мой метод возвращает HRESULT, однако в исходном коде выше я явно возвращаю составной результат набор значений в круглых скобках, т.е.:

Код: Выделить всё

(HRESULT, bool)
Приемлемо ли подобное обозначение в стандартах C/C++, и если да, то с какой целью это разрешено? Или это ошибка компилятора?

Подробнее здесь: https://stackoverflow.com/questions/104 ... or-hresult
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»