C++ and for/in (?) loops
C++ and for/in (?) loops
我对C++有点生疏(仍然)。右边的"getChildren()"函数会在每个循环中调用吗?
for (Node* node : this->m_stage->getChildren()) {
}
附带说明一下,这种循环的名称是什么?
它是从 c++11 引入的基于范围的 for 循环。this->m_stage->getChildren()
只会被评估一次。
语法
attr(optional) 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 } }
这是一个基于范围的循环。否,右侧的表达式仅计算一次。
更详细地说,形式为 for (T x : 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;
}
}
如您所见,GetChildren
只调用一次。
相关文章:
- netcat command in c++
- Difference in displaying cv2 Mat
- C++ MFC Libraries in Travis CI
- 如何在OpenSSL中从configuration.h.in获取configuration.h
- 如何在自定义类中启用'auto loops'?
- 创建具有 new in 函数和"this is nullptr"异常的对象
- IN, OUT, INOUT Parameters
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 有人安装"IITB Simplecpp in mac"吗?
- 从 C 样式字符串中删除子字符串 "in place" 在C++代码中
- 如何修复"error: ‘_1’ was not declared in this scope"?
- Softmax Implementation in C++
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- IF-nesting in c++
- Gurobi GRBModel and GRBmodel in C++
- Tensorflow Hub in C++
- Centos7 g++ "to_string is not in a member of std"
- InitializeCriticalSectionEx Not Located In KERNEL32.Dll
- C++ and for/in (?) loops
- Difference in two for nested loops.(C++)