隐秘的for循环语句

时间:2013-12-19 23:42:46

标签: c++

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

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

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

3 个答案:

答案 0 :(得分:5)

    if(t < 0)
        tt = -TSTEP;
    else
        tt = TSTEP;

    for(; fabs(t) > 1E-9; t -= tt)

希望这足以破译

答案 1 :(得分:2)

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

tt=t<0.0?-TSTEP:TSTEP;

用括号阅读可能更容易:

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

在英语中,这是“如果t小于0.0,请将-TSTEP分配给tt,否则将TSTEP分配给tt ”。如果您之前没有看过这种语法,请查看ternary operator

答案 2 :(得分:1)

我想?:运算符让你感到困惑。循环本身在朝向0的方向上改变t t(60)步,直到t几乎为0,独立于if t从开始是正还是负。 lvalue = (expr ? a : b)

的常用简写
if (expr) {
  lvalue = a;
} else {
  lvalue = b;
}