我總是覺得在任何類型的循環語句中聲明的變量都被限制在該語句中。在類似的問題上稍微捅一下似乎也證實了這個想法。因此,我通過以下摘錄從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));' –