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

Jos*_* D. 13 c++ do-while

我写的是这样的代码:

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

    i++;
} while (j < 100);
Run Code Online (Sandbox Code Playgroud)

(http://codepad.org/n5ym7J5w)

当我的编译器告诉我我不能使用变量'j'时,我感到很惊讶,因为它没有在do-while循环之外声明.

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

Car*_*rum 12

范围j只是在{}括号内.您不能在循环条件中使用它,这在该范围之外.

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

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

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


Fai*_*mon 6

这是不可能的.这是由于"声明范围"的限制.

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

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

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

如果提供的语言会更好:

do {
.
.
.
} while (int j < 100);
Run Code Online (Sandbox Code Playgroud)

但它没有提供这个.