神秘的 for 循环语句

Cryptic for-loop statement

本文关键字:循环 语句 for      更新时间:2023-10-16

我正在查看一些开源软件,他们以与我看到的不同方式使用 for 循环/运算符,我想知道是否有人可以告诉我它在用英语做什么。我相信开源是 C 语言,也许是C++,不确定它是否有区别,但我正在C++工作。

给出的 for 循环是,TSTEP=60,tt 和 t 只是双精度变量

for (tt=t<0.0?-TSTEP:TSTEP;fabs(t)>1E-9;t-=tt)
    if(t < 0)
        tt = -TSTEP;
    else
        tt = TSTEP;
    for(; fabs(t) > 1E-9; t -= tt)

希望这被破译得足够了

这当然是丑陋的代码,但实际上唯一令人困惑的部分是for语句的第一部分:

tt=t<0.0?-TSTEP:TSTEP;

使用括号可能更容易阅读:

tt = (t < 0.0 ? -TSTEP : TSTEP);

在英语中,这是"如果t小于0.0,则-TSTEP分配给tt,否则将TSTEP分配给tt"。如果以前未见过此语法,请查找三元运算符。

我想?:运算符是让你感到困惑的地方。循环本身沿 t 方向向 0 移动 tt(60) 步长,直到 t 几乎为 0,与t从一开始就是正数还是负数无关。 lvalue = (expr ? a : b)

if (expr) {
  lvalue = a;
} else {
  lvalue = b;
}