为什么(int i = 0; i< 10; ++ i)和for(int i = 0; i< 10; i ++)返回相同的?

时间:2016-11-08 09:00:19

标签: c++

为什么

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

因为它在返回之前自我递增,对吗?

3 个答案:

答案 0 :(得分: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
    }
}

现在改变循环&#34;后表达&#34; i++++i不会有任何区别,因为它的结果真的被抛弃了,并且它在循环结束时执行。

答案 1 :(得分: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

答案 2 :(得分:1)

预增量++ii++仅在这些运算符与其他事物混合时才有意义。这不是这里的情况,for循环的第3个子句是它自己的表达式,它由它自己执行。更新值的副作用始终在循环中的下一圈开始之前排序。

请注意,将++运算符与同一表达式中的其他运算符混合起来被认为是不好的做法,因为这些运算符会产生副作用。