數學運算 - c++语言
C++中的“->”運算符是什麼? (14)
請注意
-->
不是運營商。 它實際上是兩個獨立的運算符,--
和>
。
條件的代碼遞減x
,同時返回x
的原始(未遞減)值,然後使用>
運算符將原始值與0
進行比較。
為了更好地理解,該聲明可以寫成如下:
while((x--) > 0)
在comp.lang.c++.moderated
上閱讀C ++ / STL的Hidden Features和Dark Corners後 ,我完全驚訝於以下代碼片段在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 ?
後遞減x>0 ?
。
--
是遞減運算符, >
是大於運算符。
這兩個運算符作為單個運算符應用,如-->
。
傳統方式我們在while循環括號“ ()
”中定義條件並在大括號“ {}
”內終止條件,但是這個--
& >
是一種定義所有一次的方式。 例如:
int abc(){
int a = 5
while((a--) > 0){ // Decrement and comparison both at once
// Code
}
}
它說,減少並運行循環直到時間a
大於0
其他方式應該是這樣的:
int abc(){
int a = 5
while(a > 0){
// Code
a = a -1 // Decrement inside loop
}
}
兩種方式,我們做同樣的事情,實現相同的目標。
它是兩個運營商的組合。 第一個--
用於遞減值, >
用於檢查該值是否大於右側操作數。
#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
它相當於
while (x-- > 0)
x--
(後遞減)相當於x = x-1
所以,代碼轉換為:
while(x > 0) {
x = x-1;
// logic
}
完全是極客,但我將使用這個:
#define as ;while
int main(int argc, char* argv[])
{
int n = atoi(argv[1]);
do printf("n is %d\n", n) as ( n --> 0);
return 0;
}
我讀過的一本書(我記不清哪本書)說明: 編譯器嘗試使用左右規則將表達式解析為最大的標記 。
在這種情況下,表達式:
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
我希望這有助於理解複雜的表達式^^
或者對於完全不同的東西... x幻燈片到0
while (x --\
\
\
\
> 0)
printf("%d ", x);
不是那麼數學,但......每張圖片都描繪了千言萬語......
為什麼所有的並發症?
原始問題的簡單答案就是:
#include <stdio.h>
int main()
{
int x = 10;
while (x > 0)
{
printf("%d ", x);
x = x-1;
}
}
做同樣的事情。 不是說你應該這樣做,但它做同樣的事情並且會在一篇文章中回答這個問題。
x--
只是上述的簡寫, >
只是一個普通的大於operator
。 沒什麼大不了的!
現在有太多的人把簡單的事情弄複雜了;)
無論如何,我們現在有一個“去”操作員。 "-->"
很容易被記住作為一個方向,而“當x變為零”意味著 - 直。
此外,它在某些平台上比"for (x = 10; x > 0; x --)"
更有效。
這是一個非常複雜的操作員,因此即使ISO / IEC JTC1(聯合技術委員會1)也將其描述放在C ++標準的兩個不同部分。
開玩笑說,它們是兩個不同的運算符: --
和>
分別在C ++ 03標準的§5.2.6/ 2和§5.9中描述。
運行此代碼時,我的編譯器將打印出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--
post遞減x
。
while( x > 0 )
{
x--;
std::cout << x;
}
是一種不同的寫作方式。
雖然原來看起來像“雖然x變為0”但很好。