阅读后C++/STL 的隐藏特征和暗角上 年 月comp.lang.c++.moderated我感到非常惊讶的是, 以下的片段在2008年视觉工作室和G++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,因为它在海合会也是工作。标准中的定义在哪里,它来自何处?


当前回答

xC++的反方向可以更快地达到零:

int x = 10;

while( 0 <---- x )
{
   printf("%d ", x);
}

8 6 4 2

你可以用箭来控制速度!

int x = 100;

while( 0 <-------------------- x )
{
   printf("%d ", x);
}

90 80 70 60 50 40 30 20 10

;)

其他回答

这个-->完全不是接线员,我们有一个这样的接线员->,但不喜欢-->。它只是错误地解释while(x-- >0)仅表示 x 拥有后衰减运算符,而此循环将运行到大于.

写这个代码的另一种简单方法就是while(x--)时时一旦出现假情况,循环就会停止, 这里只有一个案例, 也就是说,0。当 x 值降为.

C和C+++和C++ 遵循“ 最大食量” 规则。同样的方式a---b翻译为(a--) - b,在您的情况中x-->0翻译为(x--)>0.

规则的基本内容是左向右, 表达式通过使用最大字符组成, 从而形成一个有效的符号 。

这是两个操作员的组合 第一--用于减少值,并且>用于检查值是否大于右手操作。

#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设置后,即检查条件后降值。x>0 ?.

char sep = '\n'  /1\
; int i = 68    /1  \
; while (i  ---      1\
                       \
                       /1/1/1                               /1\
                                                            /1\
                                                            /1\
                                                            /1\
                                                            /1\
                            /           1\
                           /            1 \
                          /             1  \
                         /              1   \
                         /1            /1    \
                          /1          /1      \
                           /1        /1        /1/1> 0) std::cout \
                              <<i<<                               sep;

对于较大数字, C++20 引入一些更先进的循环功能。 首先抓取i我们可以造一个反环环环环绕, 并把它偏移到std::ostream然而,i执行是定义的, 所以我们可以使用新的 C++20 速度操作器<<i<<我们必须通过建墙来赶上它,如果我们不这样做,i为指定分隔符,我们可以使用:

 std::cout \
           sep

在那里,我们有一个循环 从67到1。