2016-11-08 5 views
-2

なぜfor(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 

それがインクリメントので、それは帰りの前に自己ですよね?

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

よう

+0

結果を取得するためにinit i = 1を使用できます。 – Real73

+1

彼らは違うはずのあなたの期待の基礎は何ですか? – EJP

+0

答えは明らかですが、私はこの質問を投票の価値があるとは思わない。 – shen

答えて

8

forループは、基本的には次のように同じです。そのため、今++iにループ「発現後」i++を変更

{ 
    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 
    } 
} 

は、任意の違いをすることはありません結果は本当に投げ捨てられ、ループの最後に実行されます。

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

プリインクリメント++iまたはi++は重要同じ式です。これはここでは当てはまりません。forループの3番目の節は、それ自身で実行される独自の式です。値を更新する副作用は、ループ内の次の周回が始まる前に常に順序付けされます。

++演算子を同じ式の他のものと混在させることは悪い習慣とみなされます。これらの演算子には副作用があるためです。

+0

私は知りたいですいずれかの種類のものを混ぜて、どちらか一方の動作をさせるべきですか? – KcFnMi

関連する問題