簡體   English   中英

在基於范圍的for循環中定義引用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM