什么是C ++中的“ – >”运算符?

看完后隐藏功能和C ++ / STL的暗角comp.lang.c++.moderated,我完全惊讶的是,下面的代码片断编译并在两个Visual Studio 2008和G ++ 4.4的工作。

代码如下:

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

我认为这是C,因为它也在GCC中工作。标准在哪里定义,它来自哪里?

-->不是运营商。它实际上是两个独立的运营商,--而且>

条件代码递减x,返回x原始值(不递减),然后0使用>运算符比较原始值。

为了更好的理解,这个陈述可以写成如下:

while( (x--) > 0 )
  1. 再次,在这种情况下,它看起来像某种范围运算符。
  2. 这个答案只是部分是正确的:变量x是后减1后比较0
  3. 说x是post-decremented,然后比较0是一样的说x是减少后,比较0
  4. 在Java中它也编译:)
  5. 它的名字,@Jay,是不好的编程风格:-)这首先证明了这个问题。将操作符与操作对象进行文本绑定更有意义,而不是无关紧要,因此while (x-- > 0)更加合适。这也使得它变得更加明显(至少在固定字体编辑器中),这意味着在这个答案中的括号是没有必要的。

这是一个非常复杂的操作符,所以即使ISO / IEC JTC1(联合技术委员会1)也将其描述放在C ++标准的两个不同部分。

开玩笑一边,它们是两个不同的运营商:-->分别在§5.2.6/ 2和C ++ 03标准的§5.9中描述

或者完全不同的东西… x幻灯片为0

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

 

不是那么的数学,但是……每幅画都描绘了千言万语……

  1. 对不起,我没有得到这个。这个怎么用?
  2. @mafutrct – 我记得它在C中只是追加下一行,就好像没有换行符一样。这里基本上什么都不做。
  3. @mafu’\’字符告诉编译器当前行在下一行继续,因此编译器应该合并两行并编译为一行。’(x – > 0)’将运行,直到x等于-1。但是,他使缩进的方式看起来像x滑动到零。“而x幻灯片0 …”
  4. IIRC,K&R C允许在递减操作符中的“ – ”之间留有空格,在这种情况下,您可以在其中间有反斜杠,看起来更酷。:)
  5. @ArnavBorborah这是一个古老的表达意义why waste words when a picture does a better job,在这种情况下用作一个笑话。(实际上有2个关键字whileprintf

这相当于

while (x-- > 0)

x 在相反的方向上可以更快地达到零:

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

 

Tags:

添加评论

友情链接:蝴蝶教程