在阅读了C++/STL的C++/STL的隐藏特征和暗角(comp.lang.c++.modated)之后,我感到非常惊讶的是,以下的片段在2008年视觉工作室和G++4.4编辑和工作。

代码如下:

#include <stdio.h>
int main()
{
    int x = 10;
    while (x --> 0) // x goes to 0
    {
        printf("%d ", x);
    }
}

产出:

9 8 7 6 5 4 3 2 1 0

我想这是C,因为它在海合会也是工作。标准中的定义在哪里,它来自何处?


当前回答

这是两个运算符的组合。首先-- 用于减少值, 并且 > 用于检查值是否大于右手操作符。

#include<stdio.h>

int main()
{
    int x = 10;

    while (x-- > 0)
        printf("%d ",x);

    return 0;
}

产出将是:

9 8 7 6 5 4 3 2 1 0            

其他回答

相对于常规箭头操作员 (- >) , 您可以使用穿甲箭头操作员 : -- x> (注意箭头上那些尖锐的条纹) 。 它会为穿甲添加+1 。 因此它比常规箭头操作员更快完成环形 1 迭代 。 请尝试 :

int x = 10;
while( --x> 0 )
    printf("%d ", x);
while( x-- > 0 )

这是如何解析的。

这个 -- > 根本不是一个操作员。 我们有一个类似 -- > 的操作员, 但不像 -- > 。 这只是对时间( x - - - > 0) 的错误解释, 仅仅表示 x 有后衰落操作员, 而这个循环会运行到它大于零 。

写这个代码的另一种简单方式是时间( x - - ) 。 当它出现虚假状况时, 循环就会停止, 这里只有一个案例, 即 0 。 所以当 x 值降为零时它就会停止 。

- >不是一个操作员。它实际上是两个单独的操作员,--和 >。

条件值的代码缩进 x, 同时返回 x 的原始值( 未降值 ) , 然后使用 > 运算符将原始值与 0 比较 。

为了更好地了解,声明可以写成如下:

while( (x--) > 0 )

( -- > 0) 系指 (x - - > 0) 。

您可以使用 (x -- >) 输出: 9 8 7 7 6 5 4 4 3 2 1 0

输出: 9 8 7 7 6 5 5 4 3 2 1

您可以使用

(--\
    \
     x > 0)

产出: 9 8 8 7 7 6 5 4 4 3 2 1

您可以使用

(\
  \
   x --> 0)

产出: 9 8 8 7 7 6 5 4 4 3 2 1 0

您可以使用

(\
  \
   x --> 0
          \
           \
            )

产出: 9 8 8 7 7 6 5 4 4 3 2 1 0

您也可以使用

(
 x 
  --> 
      0
       )

产出: 9 8 8 7 7 6 5 4 4 3 2 1 0

同样,您也可以尝试很多方法来成功执行此命令 。