for循环中的c ++简单求和

1 c++ gcc loops for-loop

我正在使用g ++(GCC)4.6.0,我无法产生正确的结果.在c ++中给出以下简单的for循环

  void sum(){
  int sum;
  for(int i=0,sum=0;i<=10;sum+=i,++i);
  cout << sum << endl;
  }
Run Code Online (Sandbox Code Playgroud)

输出给了我0.假设在我添加的for循环中

  cout << sum << endl;
Run Code Online (Sandbox Code Playgroud)

它给我0,1,3 ......直到最后一行0;

我认为我得到0的原因是因为for循环中的变量阴影?所以我尝试:: sum为:: sum = 0,和:: sum + = i.但它由编译器抱怨.我也试过了

  for(sum=0,int i=0;i<=10;sum+=i,++i); 
Run Code Online (Sandbox Code Playgroud)

编译器还抱怨在for循环的第一个子句中没有主表达式

Ker*_* SB 8

真的,你必须sum三次使用标识符三个不同的东西?:-S

只要写得很清楚:

int sum = 0;
for(int i = 0; i <= 10; ++i) { sum += i; }
Run Code Online (Sandbox Code Playgroud)

没有更多的混乱,没有更多的阴影,没有更多未初始化的变量.你想骗谁?想想你的替代者,他们必须学习和理解你的代码!

提示:打开编译器警告!

PS:在任何人谈论效率并开始计算CPU周期之前:a)不要.b)拥抱你的妻子.c)比较此代码和代码的汇编.


Lig*_*ica 6

int i=0,sum=0一样的int i=0; sum=0;.这是一个声明两个变量的语句.

这意味着你正在遮蔽外部sum:

void sum() {
  int sum; // <-- one `sum`
  for (int i=0,sum=0;i<=10;sum+=i,++i) {} // <-- second `sum`
  cout << sum << endl;
}
Run Code Online (Sandbox Code Playgroud)

只有这样的声明声明可以在for序言的第一个条款中(考虑是否sum=0,int i=0在代码中的其他地方有效),但是你可以通过完全取出"初始化"来0解决这个问题:

void sum() {
   int sum = 0;
   for (int i = 0; i <= 10; sum += i, ++i) {}
   cout << sum << endl;
}
Run Code Online (Sandbox Code Playgroud)

或者,它实际上是清晰的:

void sum() {
   int sum = 0;
   for (int i = 0; i <= 10; i++) {
      sum += i;
   }
   cout << sum << endl;
}
Run Code Online (Sandbox Code Playgroud)