【问题标题】:What does j+= (i=j) mean in C++j+= (i=j) 在 C++ 中是什么意思
【发布时间】:2016-04-19 09:28:44
【问题描述】:

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

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

j += ( i = j); 

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

在 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));
}

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

【问题讨论】:

  • 这个表达式非常接近于调用未定义的行为。不要写这样的垃圾代码,而是将表达式拆分为几个。

标签: c++ vb.net operands


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    以下代码:

    j += ( i = j);
    

    这只是一种丑陋的说法

    i = j;
    j = j * 2;
    

    你也可以写成:

    i = j;
    j *= 2;
    

    以同样的方式,第二个操作将按以下顺序进行评估:

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

    【讨论】:

    • 不完全是,你跳过了关于将 j 保存到 i 的部分
    • 哦......对......多么丑陋的代码......我会立即修复我的答案!谢谢
    【解决方案3】:

    它首先将 j 分配给 i,然后将 i 添加到 j。

    像这样:

    i = j;
    j += i;
    

    【讨论】:

    • @Ben,是的(并分配 i)可能是这样的:i = j; j *= 2;
    • @Ben: double j,还要在i中留下原始值的副本,然后还要进行一段编码艺术,使表达式看起来像一系列笔画。跨度>
    【解决方案4】:
    i = j;
    j += i;
    

    等于:

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

    最后:看起来像“技巧”,但实际上是不好的做法,因为程序的可读性差。

    【讨论】:

      猜你喜欢
      • 2021-09-20
      • 2017-07-20
      • 2013-03-07
      • 1970-01-01
      • 2014-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多