我正在写类似这样的代码:
do {
int i = 0;
int j = i * 2;
cout<<j;
i++;
} while (j < 100);
( http://codepad.org/n5ym7J5w )
当我的编译器告诉我不能使用变量“j”时,我感到很惊讶,因为它没有在 do-while 循环之外声明。
我只是好奇是否有任何技术原因导致这不可能。
我正在写类似这样的代码:
do {
int i = 0;
int j = i * 2;
cout<<j;
i++;
} while (j < 100);
( http://codepad.org/n5ym7J5w )
当我的编译器告诉我不能使用变量“j”时,我感到很惊讶,因为它没有在 do-while 循环之外声明。
我只是好奇是否有任何技术原因导致这不可能。
的范围j
就在{}
大括号内。您不能在该范围之外的循环条件中使用它。
从 C++ 标准草案中,我很方便:
在块中声明的名称是该块的本地名称。它的潜在范围从它的声明点开始,到它的声明区域结束。
“块”也称为“复合语句”,是用大括号括起来的一组语句{}
。
这不可能是有原因的。这是由于“语句范围”的限制。
您的变量 i 和 j 已用“本地范围”声明 - 即 {} 括号内的变量。您实际上希望 j 用“语句范围”声明,但这是不可能的。
语句范围是那些声明为“for”、“while”、“if”或“switch”语句的一部分的变量。但是,语句范围不包括 do-while 语句,这就是您不能这样做的原因。
您基本上暴露了使用 do-while 的语言缺陷。
如果该语言提供以下内容会更好:
do {
.
.
.
} while (int j < 100);
但它不提供这个。
Double 必须更改为非保留字(感谢 Chad),需要在 do 的范围之外声明才能在 while 条件中使用。
int i = 0;
int d = 0;
do{
d = i * 2;
cout << d;
i++;
} while (d < 100);
int j = 0;
for(int i = 0;j < 100;++i){
j = i * 2;
cout<<j;
}
在每个循环之前设置 i = 0; 并声明为 int + for 循环效果更好