22

メソッド名を誤って削除したときに、この問題が発生しました。コードは

bool bRet = MethodName(pData, pOutFilename);

bool bRet = (pData, pOutFilename);

まだコンパイルされていますか?このコードは何をしますか? どういう意味ですか?true を返すようですが、これは常に当てはまりますか (pData が null の場合でも)?

どんなアイデアでも大歓迎です!

4

3 に答える 3

37

それは「コンマ演算子」です

最初のオペランドを評価して結果を破棄し、次に 2 番目のオペランドを評価してこの値 (および型) を返します。

于 2013-07-22T10:29:54.463 に答える
17

あなたの式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

出力を理解するには:優先度テーブル ,を見てください=。あなたの式では、括弧を使用して優先順位を上書きしています。

于 2013-07-22T10:29:26.917 に答える