gpt4 book ai didi

c++ - 编译器未标记 HRESULT 的错误返回值

转载 作者:行者123 更新时间:2023-11-28 04:00:23 24 4
gpt4 key购买 nike

我只是花了 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com