我正在将一些C ++代码转换为Java,并使其更容易理解。
这是Line:
Out[i] = (Sum += Tap[TapPtr++] = Inp[i]);
翻译成Java并使其更容易理解,我写道:
Tap[TapPtr++] = Inp[i];
Sum = Sum + Inp[i];
下一行应该是
Out[i] = Sum;
或应该是
Out[i] = Inp[i];
此致 霍华德
答案 0 :(得分:1)
你没有指定类型,所以我假设这些都是内置的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];
,但与最后一行一样,在功能上等同于你所写的内容。