![](/img/trans.png)
[英]Passing a vector by reference and changing its values in a range-based for loop?
[英]Define a reference in a range-based for loop
我對C ++完全不熟悉,所以問題可能有點天真:D! 最近我對基於范圍的聲明中的一個問題感到困惑。 我們被允許寫下這樣的東西:
for(int &i : vec)
然后出現了混亂。 在我看來,變量i將被定義一次並在每個循環中被賦值給不同的值。 但在上面的例子中, 我是一個只是別名的引用,應該只綁定到一個對象。 我認為解決這個問題的一種方法是認為每次都定義一個新的i 。 我搜索了關於此的進一步說明並找到了一個頁面: 范圍 !:
語法attr(可選)
for ( range_declaration : range_expression ) loop_statement
說明
上面的語法產生類似於以下的代碼(__ range,__ begin和__end僅用於說明):
auto && __range = range_expression ;
for (auto __begin = begin_expr,
__end = end_expr;
__begin != __end; ++__begin) {
range_declaration = *__begin;
loop_statement
}
'range_declaration'在for循環中定義。 但不是再利用的循環,這意味着我在第一示例中所定義的參考被再利用內定義的變量? 我仍然很困惑,任何人都可以給我一些提示。 謝謝!
循環體內定義的變量是循環體的局部變量,因此每次循環迭代時都會被破壞和重新定義。 所以int &i
在每次迭代中都是剛剛初始化的,沒有問題。
如果我們將替換(通過一些簡化)添加到您發布的示例中,可能會更清楚:
for (auto b = begin(vec), e = end(vec); b != e; ++b) {
int &i = *b;
//loop statement
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.