メソッド名を誤って削除したときに、この問題が発生しました。コードは
bool bRet = MethodName(pData, pOutFilename);
に
bool bRet = (pData, pOutFilename);
まだコンパイルされていますか?このコードは何をしますか? どういう意味ですか?true を返すようですが、これは常に当てはまりますか (pData が null の場合でも)?
どんなアイデアでも大歓迎です!
それは「コンマ演算子」です
最初のオペランドを評価して結果を破棄し、次に 2 番目のオペランドを評価してこの値 (および型) を返します。
あなたの式bool bRet = (pData, pOutFilename);
は有効な式であり、式と同等ですbool bRet = pOutFilename;
ではbool bRet = (pData, pOutFilename);
、最初の式pData
が評価され、次に 2 番目の式pOutFilename
が評価され、次に 2 番目の式の値が代入されます (演算子は左から右にbRet
このように機能します)。,
読み取り:コンマ演算子:,
コンマ演算子
,
にはleft-to-right associativity
. コンマで区切られた 2 つの式は、左から右に評価されます。左のオペランドは常に評価され、右のオペランドが評価される前にすべての副作用が完了します。
式における括弧の重要性を理解するために、( )
以下の例を考えてみてください。この例の出力を確認してください (C の例があります)。
int main () {
int i = 10, b = 20, c= 30;
i = b, c; // i = b
printf("%i\n", i);
i = (b, c); // i = c
printf("%i\n", i);
}
出力:
20
30
出力を理解するには:優先度テーブル ,
を見てください=
。あなたの式では、括弧を使用して優先順位を上書きしています。