2013-09-21 80 views
-1

你能解釋一下以下程序的輸出:輸出的程序((迷茫))

#include <iostream> 
using namespace std; 

int main() 
{ 
    int a=10; 

    int x=(a++)+(++a)+(a++)+(a++)+(++a); 

    cout<<x<<endl; 
    x+= (++a); 

    cout<<x<<" "<<a<<endl; 
} 

輸出爲:

62 

78 16 
+0

[未定義的行爲和順序點]的可能重複(http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points) – delnan

回答

0

爲什麼前置和後置的一個很好的例子增量並不總是一個好主意。運用前,後,incrments在seqence到a初始淡水河谷(10)你

這條線:

int x=(a++)+(++a)+(a++)+(a++)+(++a); 

變爲:

x = 10 + 12 + 12 + 13 + 15 // 62 

雖然x+= (++a);成爲

x += 16; // x=78 
0

a ++增加了使用某個值後的值在使用其值之前,reas ++ a會增加該值。 所以在int x = x=(a++)+(++a)+(a++)+(a++)+(++a);第一個a ++將使用值10並將a的值增加到11,現在下一個++ a會將a的值從11增加到12,然後使用它。 ,使其成爲:

x = 10 + 12 + 12 + 13 + 15 = 62 

和x的在該點的值是15。下一個輸出可類似進行解釋。乾杯!