2017-05-29 93 views
-7

請解釋爲什麼以下程序的輸出是1?請解釋爲什麼以下程序的輸出是1?

#include <iostream> 
using namespace std; 

int main() 
{ //Explain me why the output of the following program is 1 ? 
    cout << "Hello world!" << endl; 
    int y=1, x=0; 
    int p=(y++,x++)?y:x ; 
    cout<<p; 

    return 0; 
} 
+0

也有幫助閱讀:[逗號運算符](http://en.cppreference.com/w/cpp/language/operator_other#Built -in_comma_o​​perator)用@ KenY-N標記的dupe鏈接,你應該能夠弄清楚發生了什麼。 – user4581301

+0

向我們解釋你爲什麼認爲它不應該是'1' – Tas

回答

6

(y++, x++)表達被評估爲0,因爲x++表達式爲0,在評價時並因此您p變量被分配到的x它現在是1值由於後增量。

具有在表達式逗號,操作者像當:

(<expression1>, <expression2>) 

expression1獲取評估,然後丟棄,則expression2獲取評估並將其值返回。粗略地說,只有最右邊的表達式得到評估,並且在像這樣的條件下使用時返回它的值。 你的int p = (y++, x++) ? y : x;語句相當於:

int p; 
y++; 
if (x++){ 
    p = y; 
} 
else{ 
    p = x; 
} 

值得一提的是,0值相當於false一個boolean值,比0以外的任何等同於true

+0

非常感謝。對不起,但我沒有得到üh,我有點新的C++,所以你可以用簡單的詞語來回答我的問題。謝謝你提前。 –

0

您正在使用,作爲運營商。該運算符返回它的最後一個操作數。例如,如果(x,y,z)是使用逗號運算符的表達式,它將返回z的值,並放棄其他操作數(這裏x,y將被丟棄)。

回來到您的例子

int y=1, x=0; 
int p=(y++,x++)?y:x; 

如你首先使用後遞增(Y,X)將進行評估。這意味着(y,x)= 0(0將被視爲False)。一旦評估y,x將分別增加到2,1。由於(y,x)是假的,它將返回x的值爲1.

相關問題