我正在將一些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];
問候, 霍華德
我正在將一些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];
問候, 霍華德
沒有指定的類型,所以我會認爲這些都是內置的C++類,特別是算術類型(無論是整數類型或浮點型)。如果它是用戶定義的類型,我不能保證我下面說的任何東西仍然適用。
T& lhs.operator=(T& rhs)
是複製賦值操作符(它也可以是移動賦值,但在本例中不是)。 (規範)複製賦值運算符將對rhs
的引用作爲參數,將數據複製到lhs
中,並返回對lfs
的引用。
T& lhs.operator++(int)
是增量運算符(注意int
,這是將前綴與前綴增量運算符分開的東西)。雖然T&
是大多數內建類型的規範返回類型,但用戶定義類型返回T
的情況很常見。無論哪種方式,後綴增量運算符增加lhs
的值,但返回原始值。
T& lhs.operator+=(T& rhs)
是複合添加賦值運算符。它相當於表達式lhs=lhs+rhs
,只是lhs
只被評估一次。
所以要
Out[i] = (Sum += Tap[TapPtr++] = Inp[i]);
不混淆代碼相當於將
{
auto tempTapPtr=TapPtr;
++TapPtr;
Tap[tempTapPtr]=Inp[i];
Sum+=Tap[tempTapPtr];
}
Out[i]=Sum;
正如你可以看到,在Java代碼中正確的最後一行應該是Out[i]=Sum;
但是除非類型不內置算術類型,Out[i]=Inp[i]
在功能上等同。此外,您的Java代碼的第二行不正確。它應該是Sum=Sum+Tap[TapPtr-1];
,但與最後一行一樣,功能上與您所寫的內容相同。
總和是雙倍。 Inp,Out和Tap是double的數組。 TapPtr和我是整數 – Howard
謝謝。由於這些是內置類型,我不需要改變任何關於答案的內容。我會保留關於用戶定義類型的警告,以便我的答案保持一般。 –
你應該只增加** TapPtr **一次**。 –
我會建議你不要對你的問題標籤這麼自由。 – miradulo
我會學習Java編碼標準。 https://google.github.io/styleguide/javaguide.html。閱讀C++優先規則。 – duffymo