2016-11-08 162 views
-2

爲什麼爲什麼對於(int i = 0; i <10; ++ i)和for(int i = 0; i <10; i ++)返回相同?

for(int i=0; i<10; i++) 
    std::cout << i << std::endl; 

for(int i=0; i<10; ++i) 
    std::cout << i << std::endl; 

返回相同的:

0 1 2 3 4 5 6 7 8 9 

我期待的預增量返回:

1 2 3 4 5 6 7 8 9 10 

由於增加在返回之前它是自己的,對吧?

+0

你可以初始化i = 1來獲得你的結果。 – Real73

+1

你的期望是什麼,他們應該有所不同? – EJP

+0

我不認爲這個問題值得投票,儘管答案很明顯。 – shen

回答

8

一個for圈像

for(int i=0; i<10; i++) 
    std::cout << i << std::endl; 

基本相同,如下:

{ 
    int i = 0; // For loop initializer 
    while (i < 10) // For loop condition (and the actual loop) 
    { 
     std::cout << i << std::endl; // For loop body 
     i++; // For loop post-expression 
    } 
} 

現在改變環路「後表達」 i++++i不會做出任何區別,因爲它的結果實際上被丟棄,並且在循環結束時執行。

1

對於i++,將1加到i並返回原始值;對於++i,請將1添加到i並返回新值。但是你根本不使用它們的返回值。

如果打印出來的返回值,你可能會得到你想要的東西:

for(int i=0; i<10;) 
    std::cout << (i++) << std::endl; // 0 1 2 3 4 5 6 7 8 9 

for(int i=0; i<10;) 
    std::cout << (++i) << std::endl; // 1 2 3 4 5 6 7 8 9 10 
+0

請注意,這樣的代碼被認爲是不好的做法。編寫後一個循環的規範方式是for(int i = 0; i <10; ++ i)std :: cout <<(i + 1)<< std :: endl;' – Lundin

1

前遞增++ii++只有當這些運營商正在與其他東西一起混合重要的是同樣的表情。在這裏情況並非如此,for循環的第3個子句是它自己的表達式,它自己執行。更新值的副作用始終在循環的下一圈開始前排序。

請注意,在同一表達式中混合使用++運算符與其他內容被認爲是不好的做法,因爲這些運算符帶有副作用。

+0

我想知道應該將哪些事情與他們混合來做出其中一種或另一種行爲? – KcFnMi

相關問題