我一直认为在任何 种循环语句中声明的变量仅限于该语句。在类似的问题中稍作探索似乎证实了这个想法。因此,我对 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
语句的条件中声明的变量在语句体之外持续存在。
最佳答案
让我们检查一下这个循环:
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
语句的条件下声明的变量”。
关于c++ - 循环中变量的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41523989/