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

允我心安 提交于 2019-12-05 20:34:57

在阅读完comp.lang.c++.moderated的C ++ / STL的隐藏功能和“黑暗角落”后 ,我完全感到惊讶的是,以下代码段在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中使用。 该标准在哪里定义,以及它来自何处?


#1楼

实际上, x是递减的,并且正在检查该条件。 不是--> ,而是(x--) > 0

注意:检查条件后, x值会更改,因为它会递减。 也会发生一些类似的情况,例如:

-->    x-->0
++>    x++>0
-->=   x-->=0
++>=   x++>=0

#2楼

它是两个运算符的组合。 首先--用于减小值,而>用于检查该值是否大于右侧操作数。

#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            

#3楼

-->不是运算符。 实际上,它是两个单独的运算符-->

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

为了更好地理解,该语句可以编写如下:

while( (x--) > 0 )

#4楼

相当于

while (x-- > 0)

x-- (后减量)等效于x = x-1 ,因此代码转换为:

while(x > 0) {
    x = x-1;
    // logic
}

#5楼

它的

#include <stdio.h>
int main(void){
     int x = 10;

     while( x-- > 0 ){ // x goes to 0

       printf("%d ", x);
     }

     return 0;
}

就在空间让事情看起来滑稽, --递减和>进行比较。


#6楼

while( x-- > 0 )

是这样解析的。


#7楼

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

除了开玩笑,它们是两个不同的运算符: -->分别在C ++ 03标准的第5.2.6 / 2节和第5.9节中进行了描述。


#8楼

无论如何,我们现在有一个“转到”运算符。 容易记住"-->"是一个方向,“ x变为零时”是直截了当的。

而且,在某些平台上,它比"for (x = 10; x > 0; x --)"


#9楼

-->的用法具有历史意义。 减少(在某些情况下仍然是)比在x86架构上增加要快。 使用-->表示x即将变为0 ,并且吸引那些具有数学背景的人。


#10楼

此代码首先将x与0比较,然后将x减1。 (也请在第一个答案中说:先递减x,然后将x和0与>运算符进行比较。)请参见以下代码的输出:

9 8 7 6 5 4 3 2 1 0

现在,我们首先进行比较,然后通过在输出中看到0来减少。

如果我们要先递减然后比较,请使用以下代码:

#include <stdio.h>
int main(void)
{
    int x = 10;

    while( --x> 0 ) // x goes to 0
    {
        printf("%d ", x);
    }
    return 0;
}

该输出是:

9 8 7 6 5 4 3 2 1
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!