[英]Increment ++i, i++ and i+=1
我是C ++的初学者。 我的理解是: -
i ++首先执行,然后递增,++ i先递增,然后执行,i + = 1递增1,然后执行。 但是在FOR循环中:
for (i=0;i<10;i++)
for (i=0;i<10;++i)
上面这两个循环确实没有区别。
这是另一个计算从1到100的所有整数的总和:
int i=1, sum=0;
while (i<=100)
{
sum+=i;
i++; //i+=1; ++i;
}
cout<<sum<<" "<<i<<endl;
return 0;
但是如果我用i + = 1或++ i替换i ++,它们都会返回5050和101的总和。所以我真的看不出它们有什么不同。
那么有人可以向我解释这个吗? 编程中哪一个最常用? 谢谢!!
你是对的。 在您的示例中没有区别。
但这里有:
int i = 0;
cout << i++ << endl; //prints 0
cout << i << endl; //prints 1
VS
int i = 0;
cout << ++i << endl; //prints 1
cout << i << endl; //prints 1
编程中哪一个最常用?
大多数情况下, ++
是语句中唯一的操作(FYI, for
循环有三个语句)。
如果不是,那么它可能很重要,你将使用任何一个给你正确的行为。
FYI
一些开发人员认为,如果pre和postfix运算符应该总是单独使用(不是大语句的一部分)。 它们可能导致令人困惑的代码,甚至是未定义的行为。
例如,
int i = 0;
cout << i++ + i++ << endl;
有未定义的行为。
那么有人可以向我解释这个吗?
什么i++
的作用是返回的当前值i
,然后由一个增加它,并++i
第一次增加i
的1
,然后返回的值i
。
看看这个,例如:
i = 5;
j = 5;
res = i++; //res = 5, but i=6
res = ++j; //res = 6 and j=6
编程中哪一个最常用?
两者都可以根据您的需要使用,也可以根据您的需要使用。
还有一点需要注意: ++i
是l值,但i++
不是。 详情请见此处
你的分析是正确的。 i++
返回的值i
,然后增加,而++i
将递增的价值i
,然后返回新值。 i += 1
将与++i
相同。 它们在实际代码中的使用位置差异主要是情境; 关于每个人最常使用或有帮助的地方,没有具体的答案。 这一切都取决于你想做什么。
这是一个人为的例子,一次使用后增量( i++
形式)可能有用:
// Return the length of a string, including the null byte
int stringLength(char str[])
{
int length = 0;
while (str[length++] != 0);
return length;
}
如果要返回没有空字节的长度,可以使用++i
表单稍微修改上面的示例:
// Return the length of a string, without the null byte
int stringLength(char str[])
{
int length = -1;
while (str[++length] != 0);
return length;
}
至于i += 1
,我认为我没有做过那么多,因为你可以使用预增量或后增量。 我通常只将复合赋值运算符用于1以外的值。
我想如果您想象for循环如何工作,您可以理解手头的问题。
for循环
initialization --> i = 0
<check condition> --> i<10? ------->--------------------
| | |
^ |yes(i.e condition not met) |no(i.e condition met)
| V V
| --------------
| |body of loop|
| --------------
| |
| V
-------<------------increment i (**) exit for loop
** increment i
表示i++
或++i
i++
可以替换为:
int temp = i;
i = i + 1;
temp
在这里没用,所以编译器会将它优化为inc i
指令。 即使它没有那么temp
也只是浪费空间而已。
++我可以被替换
i = i + 1;
int temp = i;
再次temp不是必需的,所以编译器只需用inc i
指令替换它。
如果你看到两条指令都是相同的,因为它们没有被分配给任何东西。 只有i
受到增量的影响。 所以两者基本相同。 如果i
是内置类型,这是真的。
你看到增量指令放在循环体之后? 你现在能看到这几乎与你展示的while循环相似吗?
以这种方式思考循环总是很好的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.