C++;和for/in(?)循环 我对C++有点生疏了(仍然)。右侧的“getChildren()”函数是否会在每个循环中调用 for (Node* node : this->m_stage->getChildren()) { }

C++;和for/in(?)循环 我对C++有点生疏了(仍然)。右侧的“getChildren()”函数是否会在每个循环中调用 for (Node* node : this->m_stage->getChildren()) { },c++,C++,另一方面,这种循环的名称是什么 它是从c++11引入的。而this->m_stage->getChildren()将只计算一次 语法 attr(可选)(范围声明:范围表达式)循环语句 上述语法生成与以下(uu)范围等效的代码, __开始和结束仅用于展示): 这是一个基于范围的循环。否,右侧的表达式只计算一次 更详细地说,形式为(tx:expr)body的循环大致相当于以下循环标准: { auto && c : expr; for (auto it = begin(

另一方面,这种循环的名称是什么

它是从c++11引入的。而
this->m_stage->getChildren()
将只计算一次

语法
attr(可选)(范围声明:范围表达式)循环语句

上述语法生成与以下(uu)范围等效的代码, __开始和结束仅用于展示):

这是一个基于范围的循环。否,右侧的表达式只计算一次

更详细地说,形式为(tx:expr)body
的循环大致相当于以下循环标准:

{
    auto && c : expr;
    for (auto it = begin(c), e = end(c); it != e; ++it)
    {
        T x = *it;
        body
    }
}
特别是,这意味着范围表达式(
expr
在我的示例中)可以是右值(由函数调用创建的临时值)。请注意,范围表达式也可以是数组或大括号列表。

这称为基于范围的for循环。您的循环大致相当于:

{
    auto && __range = this->m_stage->GetChildren() ; 
    for (auto __begin = begin(__range),
         __end = end(__range); 
         __begin != __end; ++__begin) { 
        Node* node = *__begin; 
    } 
}

<> >你可以看到,<代码> Gebug子>代码>只调用一次。

什么阻止你尝试它?我可以试试,但是我能假设它会和C++和编译器的每一种味道都一样吗?至少它会显示出你的侧重点,所以,回答评论,在某些情况下仍然更快。“强尼:非常,非常伤心。
{
    auto && __range = this->m_stage->GetChildren() ; 
    for (auto __begin = begin(__range),
         __end = end(__range); 
         __begin != __end; ++__begin) { 
        Node* node = *__begin; 
    } 
}