2017-08-05 11 views
-10

私はいくつかのC++コードをJavaに変換し、理解しやすくしています。ここで奇妙なC++コード、解読しよう

がラインです:

Out[i] = (Sum += Tap[TapPtr++] = Inp[i]); 

は、Javaに翻訳し、それが簡単に理解すること、私が書かれている:

Tap[TapPtr++] = Inp[i]; 
Sum = Sum + Inp[i]; 

次の行は

Out[i] = Sum; 

かであるべきそれはすべきですか

Out[i] = Inp[i]; 

よろしく、 ハワード

+0

「TapPtr」は1回だけ増やしてください**。 –

+0

私はあなたの質問タグでとてもリベラルではないことをお勧めします。 – miradulo

+1

私はJavaコーディング標準を学びます。 https://google.github.io/styleguide/javaguide.html。 C++優先ルールを読んでください。 – duffymo

答えて

1

あなたは型を指定しませんでしたので、私は、これらはすべての組み込みC++型、特に算術型(整数型または浮動小数点型のいずれか)であると仮定するつもりです。それがユーザー定義型の場合は、以下に述べることが何も保証されません。

T& lhs.operator=(T& rhs)はコピー代入演算子です(この場合は移動代入でも可能です)。 (正規の)コピー代入演算子は、rhsをパラメータとして参照し、lhsにデータをコピーし、lfsへの参照を返します。

T& lhs.operator++(int)は、増分演算子です(intに注意してください。これは接頭辞増分演算子から接尾辞を区切るものです)。ほとんどの組み込み型ではT&が正規の戻り値型ですが、ユーザー定義型ではTを返すのが一般的です。いずれにしても、後置インクリメント演算子はlhsの値を増やしますが、元の値を返します。

T& lhs.operator+=(T& rhs)は、化合物加算代入演算子です。 lhsが1回だけ評価されること以外は、式lhs=lhs+rhsと同等です。

タイプではない場合を除きので

Out[i] = (Sum += Tap[TapPtr++] = Inp[i]); 

にコードを混乱させない同等のは、あなたが見ることができるように、Javaコード内の正しい最後の行はOut[i]=Sum;あるべき

{ 
    auto tempTapPtr=TapPtr; 
    ++TapPtr; 
    Tap[tempTapPtr]=Inp[i]; 
    Sum+=Tap[tempTapPtr]; 
} 
Out[i]=Sum; 

ことだろうが、組み込み算術型では、Out[i]=Inp[i]は機能的に同等です。また、Javaコードの2行目が間違っています。それはSum=Sum+Tap[TapPtr-1];でなければなりませんが、最後の行と同様に、あなたが書いたものと機能的に同等です。

+0

合計は2倍です。 Inp、Out、およびTapはdoubleの配列です。 TapPtrとiは整数です – Howard

+0

ありがとうございます。これらは組み込み型なので、答えの肉について何も変更する必要はありません。私の答えは一般的なままであるように、ユーザー定義型についての警告を保ちます。 –