为什么
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 :(得分: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)
预增量++i
或i++
仅在这些运算符与其他事物混合时才有意义。这不是这里的情况,for循环的第3个子句是它自己的表达式,它由它自己执行。更新值的副作用始终在循环中的下一圈开始之前排序。
请注意,将++
运算符与同一表达式中的其他运算符混合起来被认为是不好的做法,因为这些运算符会产生副作用。