C++中j+=(i=j)是什么意思

What does j+= (i=j) mean in C++

我几乎没有 C 语言编程经验。但现在我必须在 VB.net 应用程序中使用一些 C 代码。

到目前为止翻译代码是成功的,但是我遇到了这个奇怪的(至少对我来说)语句

j += ( i = j); 

j和i都是整数。我一直在这个论坛和 Google 上寻找,但没有找到关于它可能意味着什么的答案。

在 C 代码中我有一些类似的代码看起来像

chisq += (temp = y[i] - (aa + bb*x[i]), temp*temp);

除了 i 之外的所有变量都是双精度或双精度数组。

如果我犯了一些语法或拼写错误,请原谅。

提前致谢。

编辑:感谢所有的答案...他们非常清楚...不幸的是,我 运行 在从 C 到 VB.net 的转变中陷入了死胡同...

struct profile *p = profiles;
double uf[ARRAY_SIZE];
int i;
double u, v, s;

for (i = 1; i <= n; i++, p++) {
    if (p->drctn)
        v = phi;
    else    v = TWOPI - phi;
    u = p->xfall*TWOPI;
    uf[i] = -(a0*cos(u + v) - a1*sin(u + v));
}

我相信这无法翻译...无论如何感谢您提供的所有重要信息!!!

先把j赋给i,然后把i加给j。

像这样:

i = j;
j += i;
i = j;
j += i;

等于:

i = j;
j *= 2; // j += i is the same as j += j which is j = j + j;

最后:看起来像"trick"但实际上是不好的做法,因为程序的可读性很差。

以下代码:

j += ( i = j);

这只是一种丑陋的说法

i = j;
j = j * 2;

也可以写成:

i = j;
j *= 2;

以同样的方式,第二个操作将按以下顺序计算:

temp = y[i] - (aa + bb * x[i]);
chisq = chisq + (temp * temp);

chisq += (temp = y[i] - (aa + bb*x[i]), temp*temp); 将按以下方式计算:

operator ,,共 temp = y[i] - (aa + bb*x[i])temp*temp 如果它没有重载,那么它将评估第一个参数,丢弃它然后评估第二个参数和 return it

temp = y[i] - (aa + bb*x[i]);
chisq = chisq + temp*temp;