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

标签 c++ c compiler-construction hresult

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

相关文章:

c++ - Visual Studio Code 设置默认配置

c++ - 我该如何优化这段代码? (Qt5)

c - 重命名(更合适): header guard would cause struct compile error

python - 我可以从 C main() 程序返回一个字符串吗

c# - 循环编译优化

c++ - <string> 和 <string.h> 之间的区别?

c++ - DirectX 11中立方体网格的渲染不正确

c++ - GNU 编译器 vs. Visual Studio 在数组上分配 w/Length Constant w/in a Scope

c++ - iPhone编译移植代码问题: variable given same name as typedef'd type failing

java "error cannot open file"jar