2013-04-28 76 views

回答

20

它只被評估一次。該標準認爲,對於環路基於範圍的等效於此:

§6.5.4範圍爲基礎的聲明 [stmt.ranged]

{ 
    auto && __range = range-init; 
    for (auto __begin = begin-expr, 
     __end = end-expr; 
     __begin != __end; 
     ++__begin) { 
    for-range-declaration = *__begin; 
    statement 
    } 
} 

range-init等同於(bar())您的情況(您指定的表達式,括號括起來)。您只能看到該表達式的一次評估。