我是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
与
int i = 0;
cout << ++i << endl; //prints 1
cout << i << endl; //prints 1
其中哪一个在编程中使用最多?
大多数时候,++
是语句中唯一的操作(仅供参考,for
循环有三个语句)。
如果不是,那么它可能很重要,你会使用任何一个给你正确行为的。
仅供参考
一些开发人员认为if 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
的值,随后返回新值。CCD_ 15将执行与CCD_ 16相同的操作。它们在实际代码中的使用位置的差异主要是情境性的;对于它们中的每一个在哪里最常用或最有用,没有具体的答案。这完全取决于你想做什么。
这里有一个人为的例子,说明使用后增量(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循环是如何工作的,你就能理解眼前的问题。
用于环路
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
指令。即使它不起作用,CCD_ 26也只是浪费空间,仅此而已。
++我可以被取代
i = i + 1;
int temp = i;
同样,不需要temp,所以编译器将用inc i
指令替换它。
如果您看到两个指令是相同的,因为它们是而不是被分配给任何东西。只有CCD_ 28受到增量的影响。所以两者本质上是相同的。如果CCD_ 29是内置类型,则这是真的。
你看到增量指令放在循环的后面了吗?你现在能看到这几乎和你展示的while循环相似吗?
以这种方式思考循环总是很好的。