我写的是这样的代码:
do {
int i = 0;
int j = i * 2;
cout<<j;
i++;
} while (j < 100);
Run Code Online (Sandbox Code Playgroud)
当我的编译器告诉我我不能使用变量'j'时,我感到很惊讶,因为它没有在do-while循环之外声明.
我很好奇是否有任何技术原因导致这种情况无法实现.
Car*_*rum 12
范围j只是在{}括号内.您不能在循环条件中使用它,这在该范围之外.
从C++草案标准我很方便:
块中声明的名称是该块的本地名称.它的潜在范围始于其声明点,并在其声明区域结束时结束.
"块"也称为"复合语句",是用括号括起来的一组语句{}.
这是不可能的.这是由于"声明范围"的限制.
您的变量i和j已声明为"local scope" - 即{}括号内的变量.你实际上想要用"语句范围"声明j,但这是不可能的.
语句范围是声明为"for","while","if"或"switch"语句的一部分的变量.但是,语句范围不包括do-while语句,这就是为什么你不能这样做的原因.
你基本上暴露了使用do-while的语言缺点.
如果提供的语言会更好:
do {
.
.
.
} while (int j < 100);
Run Code Online (Sandbox Code Playgroud)
但它没有提供这个.