什么是C ++中的“-gt;”运算符?
在阅读完<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)
- 您可以使用
(x -->)
output -: 9 8 7 6 5 4 3 2 1 0
- 您可以使用
(-- x > 0)
表示(--x > 0)
output -: 9 8 7 6 5 4 3 2 1
- 您可以使用
(--\\x > 0)
output -: 9 8 7 6 5 4 3 2 1
- 您可以使用
(\\x --> 0)
output -: 9 8 7 6 5 4 3 2 1 0
- 您可以使用
(\\x --> 0\\)
output -: 9 8 7 6 5 4 3 2 1 0
- 你也可以使用
(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;”运算符?相关推荐
- C++中重载下标运算符[]
1.C++中重载下标运算符[] C++规定,下标运算符[]必须以成员函数的形式进行重载,该重载函数在类中的声明格式如下: 返回值类型 & operator[] (参数列表);// 或者cons ...
- python中的成员运算符用于判断什么_Python之运算符
原标题:Python之运算符 这章我们介绍如何用Python的运算符,大家不懂的地方可以加群:579817333咨询学习 Python运算符包括赋值运算符.算术运算符.关系运算符.逻辑运算符.位运算符 ...
- java比较字符引用地址_java中的比较运算符== 与 equals()方法
初学JAVA的时候对这两种比较方式也有疑惑,趁着现在整理一下自己的理解. JAVA中变量分为两类,一类是值类型,它储存的是变量真正的值,比如基础数据类型,值类型储存在内存的栈中:一类是引用类型,他们储 ...
- JavaScript中的instanceof运算符是什么?
本文翻译自:What is the instanceof operator in JavaScript? The instanceof keyword in JavaScript can be qui ...
- C语言中的位运算符主要有哪些?逻辑右移与算术右移的区别?
逻辑右移与算术右移的区别? 逻辑右移就是不考虑符号位,右移一位,左边补零即可. 算术右移需要考虑符号位,右移一位,若符号位为1,就在左边补1,:否则,就补0. 所以算术右移也可以进行有符号位的除法,右 ...
- C#中的{n}运算符
今天学到了C#中的{n}运算符,感觉这个运算符就是对C++中%d运算符的一种改进, 因为{n}运算符能够指定替换列表中的第几个,就比%d之类的运算符操作起来省力很多. 我的例程: 1 using Sy ...
- AS3.0中is,as运算符
AS3.0中is,as运算符 (1) is运算符 在AS3.0新增加的is运算符,主要功能是判断一个变量或者等式是不是等于给定的数据类型,在以前的版本中,有instanceof来实现相同的功能.但是i ...
- c语言共有几种运算符_【填空题】C语言一共有 ()个关键字,()中控制语句,()种运算符...
[填空题]C语言一共有 ()个关键字,()中控制语句,()种运算符 更多相关问题 [填空题] 对煤进行工业分析的目的,是为了判断煤的(). [填空题] 钛的比重是不锈钢的一半,抗腐蚀性是不锈钢的(). ...
- 小心VB.NET中的除运算符/和/
小心VB.NET中的除运算符"/"和"/" VB.NET中除运算符有两种,普通除"/"和整数除"/",如果我们写程序时不 ...
- Java培训教程:Java中的位移运算符!
学习Java本来就是一件日积月累的事情,或许你通过自学能掌握一些皮毛技术,通过系统学习学到Java的一些基本大面,但想要做到精通,还是需要自己技术的日积月累和工作经验的不断积累. 今天小千给大家分享的 ...
最新文章
- 初学WPF之程序启动几种方式
- SAP WebIDE 里 UI5 应用的隐藏文件 project.json
- C++基础复习——C++语言数据类型
- php mysql 写法_php 类的写法
- 华为2019年校招(20届实习)机考题python版解答与思路(2019-3-13软件题)
- qt改变tab形状_生命吗哪QT灵修 11月18日
- linux怎么定义程序执行有限级别,linux 内核是什么?
- 什么是pdi检测_汽车pdi检测是什么?如何知道新车做没做pdi
- Win11系统Microsoft Store应用商店加载空白,不能下载软件.
- 计算机文件夹操作有哪些,电脑操作常用的快捷键有哪些
- 如何应用计算机键盘截图,键盘怎么截图快捷键_键盘上截屏是哪个键-win7之家
- 通用国籍,民族,亲属关系,证件类型,常见银行数组,可用于选择框,下拉框等
- 2019上半年深圳二手楼市热度如何?(链家数据爬取分析)
- 闲鱼平台API,item_app获得闲鱼原生数据
- 词根词缀tort/tour/tox/tract/等词根衍生词汇
- SCI英文论文写作- Latex 进阶
- 淘宝网nbsp;E客服帐号nbsp;登录阿里旺旺时nbsp;…
- Java Json格式化工具
- create-react-app之构建应用
- 【基础知识】~ FIFO
热门文章
- 含有计算机专业词的告别文案,那些超级适合告别的文案,充满了对过往的怀念和遗憾...
- Instruments--CoreAnimation页面性能调试
- python画图中文显示_解决Linux系统中python matplotlib画图的中文显示问题
- java 面试题之银行业务系统
- 第一册:lesson seventeen。
- C#定时清理内存,net网页端可以尝试使用
- redis主从复制下哨兵模式---选举原理
- 爬虫:获取页面 -- request库的使用
- replace和replacAll
- php循环语句for while do while的用法