我正在使用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循环的第一个子句中没有主表达式
真的,你必须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)比较此代码和代码的汇编.
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)
归档时间: |
|
查看次数: |
3254 次 |
最近记录: |