每个循环中的语句是否在每次迭代中执行?

Is statement in for each loop executed each iteration?

我有一个函数,其中 returns 一个容器。我们就称它为“Container”吧。

Container GenerateRandomContainer() { ... }

此函数将生成一个容器,其中包含每次调用都不同的随机元素。

当我像这样使用 for each 循环遍历此容器时:

for(Element e : GenerateRandomContainer()) { ... }

它会在每次迭代中生成一个新的 Container 还是在进入 for each 循环时只生成一个?

range-based for loop等价于:

{
    auto && __range = range_expression ; 
    auto __begin = begin_expr ;
    auto __end = end_expr ;
    for ( ; __begin != __end; ++__begin) { 
        range_declaration = *__begin; 
        loop_statement 
    } 
} 

注意第一个语句 auto && __range = range_expression ;range_expression 对于您的代码将是 GenerateRandomContainer());这意味着 Container 只会生成一次,并迭代它的所有元素。

它只会生成一次容器,然后循环遍历生成的元素。