我只是花了 way 太长时间试图诊断为什么在下面的代码片段中,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
行的 inner 括号内,就像这样:
return m_pPool->GetFsm()->ProcessEvent(anEvent, false); // Corrected code
我一看到这个,就踢了自己一脚。发现这一点显然变得更加困难,因为原始编码器在 return
行中使用了多余的 outer 括号。
我的问题是,为什么编译器没有为我选择它?
我的方法返回一个 HRESULT
,但在上面的原始代码中,我显然在括号中返回一组复合值,即:
(HRESULT, bool)
这样的符号在 C/C++ 标准中是否可以接受,如果可以,允许这样做的目的是什么?或者这是编译器中的错误?
最佳答案
您遇到了逗号运算符的问题,它计算并丢弃其左侧操作数的值,然后将其右侧操作数计算为表达式的值。
此外,ProcessEvent 参数的默认值是您的单参数调用可接受的原因。
关于c++ - 编译器未标记 HRESULT 的错误返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1042107/