2013-04-28 2 views

risposta

20

Viene valutato solo una volta. La norma dice che la gamma-based per il ciclo è equivalente a questo:

§6.5.4 La gamma-based per la dichiarazione [stmt.ranged]

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

con range-init equivalenti a (bar()) nel tuo caso (l'espressione specificata, circondata da parentesi). Quell'espressione viene valutata solo una volta, come puoi vedere.