在阅读完<code>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 0printf("%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

#11楼

-->之间缺少空格。 x是递减的,也就是说,在检查条件x>0 ?之后递减x>0 ?


#12楼

这与

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

对于非负数


#13楼

运行此代码时,我的编译器将打印出9876543210。

#include <iostream>
int main()
{int x = 10;while( x --> 0 ) // x goes to 0{std::cout << x;}
}

如预期的那样。 while( x-- > 0 )实际上意味着while( x > 0)x--后减x

while( x > 0 )
{x--;std::cout << x;
}

是写同一件事的另一种方式。

很好的是,原来看起来像“而x变为0”。


#14楼

C和C ++遵循“最大嚼数”规则。 将a --- b转换为(a--) - b ,在您的情况下, x-->0转换为(x--)>0

规则本质上是说,从左到右,表达式是通过采用将构成有效表达式的最大字符组成的。


#15楼

--减量运算符,而>大于运算符。

这两个运算符像-->一样应用为一个。


#16楼

我读过的一本书(我不记得是哪本书)说: 编译器尝试使用左右规则将表达式解析为最大标记

在这种情况下,表达式:

x-->0

解析为最大令牌:

token 1: x
token 2: --
token 3: >
token 4: 0
conclude: x-- > 0

相同的规则适用于此表达式:

a-----b

解析后:

token 1: a
token 2: --
token 3: --
token 4: -
token 5: b
conclude: (a--)-- - b

我希望这有助于理解复杂的表达方式^^


#17楼

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

;)


#18楼

极客,但我会用这个:

#define as ;whileint main(int argc, char* argv[])
{int n = atoi(argv[1]);do printf("n is %d\n", n) as ( n --> 0);return 0;
}

#19楼

为什么所有的并发症?

原始问题的简单答案是:

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

做同样的事情。 并不是说您应该这样做,但是它做同样的事情,并且会在一篇文章中回答该问题。

x--只是上述的简写,而>只是一个普通的大于operator 。 没什么大不了的!

如今有太多人使简单的事情变得复杂;)


#20楼

按照常规方式,我们将在while循环括号()定义一个条件,并在括号{}定义一个终止条件,但是-->定义两者。

例如:

int abc(void)
{int a = 5while((a--) > 0) // Decrement and comparison both at once{// Code}
}

这将使a减小并在a大于0时运行循环。

按照惯例,它将是:

int abc(void)
{int a = 5;while(a > 0){a--;// Code}a--;
}

两种方式,我们都做相同的事情,实现相同的目标。


#21楼

(x --> 0)表示(x-- > 0)

  1. 您可以使用(x -->)
    output -: 9 8 7 6 5 4 3 2 1 0
  2. 您可以使用(-- x > 0)表示(--x > 0)
    output -: 9 8 7 6 5 4 3 2 1
  3. 您可以使用
(--\\x > 0)

output -: 9 8 7 6 5 4 3 2 1

  1. 您可以使用
(\\x --> 0)

output -: 9 8 7 6 5 4 3 2 1 0

  1. 您可以使用
(\\x --> 0\\)

output -: 9 8 7 6 5 4 3 2 1 0

  1. 你也可以使用
(x --> 0)

output -: 9 8 7 6 5 4 3 2 1 0

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


#22楼

在2个运算符之间放置一个空格,否则编译器会将其视为单个运算符。 (z--> 0)


#23楼

或完全不同的东西... x滑至0

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

并不是那么数学,但是...每张画都画一千个单词...

什么是C ++中的“-gt;”运算符?相关推荐

  1. C++中重载下标运算符[]

    1.C++中重载下标运算符[] C++规定,下标运算符[]必须以成员函数的形式进行重载,该重载函数在类中的声明格式如下: 返回值类型 & operator[] (参数列表);// 或者cons ...

  2. python中的成员运算符用于判断什么_Python之运算符

    原标题:Python之运算符 这章我们介绍如何用Python的运算符,大家不懂的地方可以加群:579817333咨询学习 Python运算符包括赋值运算符.算术运算符.关系运算符.逻辑运算符.位运算符 ...

  3. java比较字符引用地址_java中的比较运算符== 与 equals()方法

    初学JAVA的时候对这两种比较方式也有疑惑,趁着现在整理一下自己的理解. JAVA中变量分为两类,一类是值类型,它储存的是变量真正的值,比如基础数据类型,值类型储存在内存的栈中:一类是引用类型,他们储 ...

  4. JavaScript中的instanceof运算符是什么?

    本文翻译自:What is the instanceof operator in JavaScript? The instanceof keyword in JavaScript can be qui ...

  5. C语言中的位运算符主要有哪些?逻辑右移与算术右移的区别?

    逻辑右移与算术右移的区别? 逻辑右移就是不考虑符号位,右移一位,左边补零即可. 算术右移需要考虑符号位,右移一位,若符号位为1,就在左边补1,:否则,就补0. 所以算术右移也可以进行有符号位的除法,右 ...

  6. C#中的{n}运算符

    今天学到了C#中的{n}运算符,感觉这个运算符就是对C++中%d运算符的一种改进, 因为{n}运算符能够指定替换列表中的第几个,就比%d之类的运算符操作起来省力很多. 我的例程: 1 using Sy ...

  7. AS3.0中is,as运算符

    AS3.0中is,as运算符 (1) is运算符 在AS3.0新增加的is运算符,主要功能是判断一个变量或者等式是不是等于给定的数据类型,在以前的版本中,有instanceof来实现相同的功能.但是i ...

  8. c语言共有几种运算符_【填空题】C语言一共有 ()个关键字,()中控制语句,()种运算符...

    [填空题]C语言一共有 ()个关键字,()中控制语句,()种运算符 更多相关问题 [填空题] 对煤进行工业分析的目的,是为了判断煤的(). [填空题] 钛的比重是不锈钢的一半,抗腐蚀性是不锈钢的(). ...

  9. 小心VB.NET中的除运算符/和/

    小心VB.NET中的除运算符"/"和"/" VB.NET中除运算符有两种,普通除"/"和整数除"/",如果我们写程序时不 ...

  10. Java培训教程:Java中的位移运算符!

    学习Java本来就是一件日积月累的事情,或许你通过自学能掌握一些皮毛技术,通过系统学习学到Java的一些基本大面,但想要做到精通,还是需要自己技术的日积月累和工作经验的不断积累. 今天小千给大家分享的 ...

最新文章

  1. 初学WPF之程序启动几种方式
  2. SAP WebIDE 里 UI5 应用的隐藏文件 project.json
  3. C++基础复习——C++语言数据类型
  4. php mysql 写法_php 类的写法
  5. 华为2019年校招(20届实习)机考题python版解答与思路(2019-3-13软件题)
  6. qt改变tab形状_生命吗哪QT灵修 11月18日
  7. linux怎么定义程序执行有限级别,linux 内核是什么?
  8. 什么是pdi检测_汽车pdi检测是什么?如何知道新车做没做pdi
  9. Win11系统Microsoft Store应用商店加载空白,不能下载软件.
  10. 计算机文件夹操作有哪些,电脑操作常用的快捷键有哪些
  11. 如何应用计算机键盘截图,键盘怎么截图快捷键_键盘上截屏是哪个键-win7之家
  12. 通用国籍,民族,亲属关系,证件类型,常见银行数组,可用于选择框,下拉框等
  13. 2019上半年深圳二手楼市热度如何?(链家数据爬取分析)
  14. 闲鱼平台API,item_app获得闲鱼原生数据
  15. 词根词缀tort/tour/tox/tract/等词根衍生词汇
  16. SCI英文论文写作- Latex 进阶
  17. 淘宝网nbsp;E客服帐号nbsp;登录阿里旺旺时nbsp;…
  18. Java Json格式化工具
  19. create-react-app之构建应用
  20. 【基础知识】~ FIFO

热门文章

  1. 含有计算机专业词的告别文案,那些超级适合告别的文案,充满了对过往的怀念和遗憾...
  2. Instruments--CoreAnimation页面性能调试
  3. python画图中文显示_解决Linux系统中python matplotlib画图的中文显示问题
  4. java 面试题之银行业务系统
  5. 第一册:lesson seventeen。
  6. C#定时清理内存,net网页端可以尝试使用
  7. redis主从复制下哨兵模式---选举原理
  8. 爬虫:获取页面 -- request库的使用
  9. replace和replacAll
  10. php循环语句for while do while的用法