在条件中使用在do-while循环内声明的变量

时间:2013-08-30 20:51:48

标签: c++ do-while

我写的是这样的代码:

do {
    int i = 0;
    int j = i * 2;
    cout<<j;

    i++;
} while (j < 100);

http://codepad.org/n5ym7J5w

当我的编译器告诉我我不能使用变量&#39; j&#39;因为它没有在do-while循环之外声明。

我很好奇是否有任何技术原因导致这种情况无法实现。

5 个答案:

答案 0 :(得分:12)

j的范围恰好在{}括号内。您不能在循环条件中使用它,这不在该范围内。

从C ++草案标准我很方便:

  

块中声明的名称是该块的本地名称。它的潜在范围始于其声明点,并在其声明区域结束时结束。

“块”也称为“复合语句”,是用括号{}括起来的一组语句。

答案 1 :(得分:6)

有一个原因导致这种情况无法实现。这是由于“声明范围”的限制。

您的变量i和j已使用“local scope”声明 - 即{}括号内的变量。你实际上想要用“语句范围”声明j,但这是不可能的。

Statement-scope是声明为'for','while','if'或'switch'语句的一部分的变量。但是,语句范围不包括do-while语句,这就是为什么你不能这样做的原因。

你基本上暴露了使用do-while的语言缺点。

如果提供的语言会更好:

do {
.
.
.
} while (int j < 100);

但它不提供此功能。

答案 2 :(得分:0)

Double,必须更改为非保留字(感谢Chad),需要在do的范围之外声明,以便在while条件下使用。

int i = 0;
int d = 0;
do{
    d = i * 2;
    cout << d;
    i++;
} while (d < 100);

答案 3 :(得分:0)

  • do循环的语法是do {} {}中的任何变量声明都只存在于此范围内。因此,j的范围仅在do {}内,因为它是在此范围内声明的。它只能在此范围内调用或引用。
  • 如果要访问此范围之外的j,则需要将j声明为全局变量。将j的声明移到此范围之外。

答案 4 :(得分:-1)

int j = 0;
for(int i = 0;j < 100;++i){
j = i * 2;
cout<<j;
}

在每个循环集之前i = 0;并声明为int + for循环效果更好