我总是觉得在任何类型的循环语句中声明的变量都被限制在该语句中。在类似的问题上稍微捅一下似乎也证实了这个想法。因此,我通过以下摘录从C++的Stroustrup的甲游不解(§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;
}
输入环路由一个结束文件或格式化错误终止。在此之前,每个数字 读取被添加到Vector
,使得在结束时,v
的大小是元件的数量阅读。我使用了for
-statement而不是更传统的while
- 声明将d
的范围限制为循环。“
这似乎意味着,在一个while
语句的条件声明的变量坚持声明体外。
在'for'循环语句中声明的变量处于整个循环体的范围内。这就是说,“*我使用'for'语句而不是传统的'while'语句来保持'd'的作用域限于循环*” - 如果使用'std :: copy()'使用'std :: istream_iterator'和'std :: back_inserter',可以完全消除循环,例如:'std :: copy(std :: istream_iterator(is),std :: istream_iterator (),std :: back_inserter(v));' –