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

C++ 在C+中使用减量/增量后缀运算符时防止风险+;?,c++,operators,decrement,postfix-operator,C++,Operators,Decrement,Postfix Operator,最近我发现使用st的风险如下: int i = 10; int sum = 0; while ( i-- ){ sum = sum + i; 它实际上得到了sum=9+8+7+1.因此,它总共缺少10个。但我更喜欢这种编码方式,它既快又专业。有什么建议可以防止这种风险,并且仍然有简明的代码吗?使用do while而不是while。不知道“风险”和“专业”的编码方式是什么意思,这种代码是错误的。如果你想让它看起来和你写的“相似” int i = 10; int sum = i; wh

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

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

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

使用do while而不是while。

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

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


后缀的增量/减量可能非常糟糕。我建议不要使用它。你的例子甚至不是最糟糕的。它的表现非常好:你实际上得到了sum=9+8+7+…+1+0;所以你要像人们想象的那样经历10次循环

如注释中所述,使用for循环

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

前缀运算符不太容易混淆,在某些情况下,可以生成更快的代码。

您有一个计数器、一个停止条件和一个减量操作,因此对循环使用
,这比
更合适,而

int sum = 0;
for (int i = 10; i > 0; --i) {
    sum += i;
}
“专业”,简洁且无风险:)

编辑:或者,如果您想变得非常简洁:


至少对于这种特定类型的序列(从1..N求和),您可以执行
N*(N+1)/2
。10*11/2=55。

使用for循环。我看不出这其中有什么特别“专业”。也没有真正告诉编译器你的意图,错过了机会…
while((sum+=I--),I)更简洁,工作正确,但可能会让你被解雇。
sum=55;/*sum(1..10)*/
更简洁,工作正确,在我工作的地方会得到表扬。编写晦涩或过于简洁的代码与编写清晰、可维护和专业的代码相反。编写专业代码并不是要向同事展示你的语句是多么聪明和简洁。
do-while
结构最终会执行循环体11次,不是吗?很难说在OP的世界里什么是“危险的”,但对我来说似乎很危险。应该在编辑后执行10次。如果
i
不是正面的,那么你仍然可以把它算作危险的事情,等等。没有上下文,很难做出最好的决定。你的意思可能是
N*(N+1)/2
。在您的示例中,
(10*10+1)/2=50.5
,这肯定是错误的;)@弗雷德:哦,是的。非常感谢。
int sum = 0;
for (int i = 10; i > 0; --i) {
    sum += i;
}
int sum = 55;