2016-11-08 116 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

相关问题