在C ++中使用递减/递增后缀运算符时防止风险?

时间:2011-04-26 17:24:47

标签: c++ operators decrement postfix-operator

最近我发现使用st时的风险:

int i = 10;
int sum = 0;
while ( i-- ){
      sum = sum + i;

它实际得到sum = 9 + 8 + 7 + .. + 1.所以它总共缺少10个。但我更喜欢这种编码方式,它快速而专业。有什么建议可以防止风险并且仍然有简洁的代码吗?

5 个答案:

答案 0 :(得分:5)

你有一个计数器,一个停止条件和一个减量操作,所以使用一个for循环 - 它比while更合适:

int sum = 0;
for (int i = 10; i > 0; --i) {
    sum += i;
}

“专业”,简明扼要,无风险:)

修改或者如果你想真的简洁:

int sum = 55;

答案 1 :(得分:3)

至少对于这种特定类型的系列(总和来自1..N),你可以N*(N+1)/2。 10 * 11/2 = 55。

答案 2 :(得分:1)

后缀增量/减量可能非常讨厌。我建议不要使用它。你的例子甚至不是最糟糕的。它的表现非常好:你实际上得到的是sum = 9 + 8 + 7 + ... + 1 + 0;所以你正在思考这个循环10次。

如评论中所述,使用for循环。

int sum=0;
for (int i=10;i;--i) sum+=i;

前缀运算符更容易混淆,在某些情况下,会使代码更快。

答案 3 :(得分:0)

使用do-while而不是while。

答案 4 :(得分:0)

不知道你的“风险”和“专业”编码方式是什么意思,这段代码是错误的。如果你希望它看起来与你写的“相似”

int i = 10;
int sum = i;
while ( i-- ){
      sum = sum + i;

int i = 10;
int sum = 0;
do {
    sum += i;
} while (--i);