次のコード スニペットで、メソッドが for に渡した値を無視しているように見える理由を診断するのに時間がかかりすぎました。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
return m_pPool->GetFsm()->ProcessEvent(anEvent, false); // Corrected code
これを見た瞬間、自分を蹴り飛ばしました。元のコーダーが行で冗長な外側の括弧を使用したため、これを見つけるのは明らかに難しくなりましたreturn
。
私の質問は、コンパイラがこれを認識しなかったのはなぜですか?
私のメソッドは を返してHRESULT
いますが、上記の元のコードでは、括弧内に値の複合セットを明確に返しています。
(HRESULT, bool)
このような表記法は C/C++ 標準で受け入れられますか? もしそうなら、これを許可する目的は何ですか? それともコンパイラのバグですか?