我总是认为在任何类型的循环语句中声明的变量仅限于该语句。在类似的问题中略微探讨似乎证实了这个想法。所以我对Stroustrup的 C ++之旅(§4.2.3初始化容器第38页)中的以下摘录感到困惑:
“push_back()
对于输入任意数量的元素很有用。例如:
Vector read(istream& is) {
Vector v;
for (double d; is>>d;) // read floating-point values into d
v.push_back(d); // add d to v
return v;
}
输入循环由文件结尾或格式错误终止。在此之前,每个号码
read被添加到Vector
,以便最后v
的大小是读取的元素数。 我使用for
语句而不是更传统的while
语句来保持d
的范围仅限于循环。“
这似乎意味着在while
语句的条件下声明的变量在语句体之外仍然存在。
答案 0 :(得分:4)
[..]表示在while语句[...]
的条件下声明的变量
那是不可能的。
使用for
语句可以声明像这样的变量
for(int a = 0; a < 5; a++) {
// Use a
}
// a is not visible anymore
如果使用while
循环,则可见
int a = 0;
while(a < 5) {
// Use a
a++;
}
// a still visible
答案 1 :(得分:4)
让我们检查一下这个循环:
for (double d; is>>d;) // read floating-point values into d
v.push_back(d); // add d to v
我们有:
d
而且,是的,d
的范围仅限于for
循环。
现在尝试编写while
循环来执行相同的工作,使d
的范围受限。你不可能,因为在while
的序言中没有地方可以申报。只有for
具有该功能。 while
只有一个条件。
这并不意味着while
的范围规则不同;它只表示无法使用while
编写此代码。 不是在while
语句&#34;的条件下声明的任何&#34;变量。