我正在网上寻找关于线程的内容,偶然发现了一篇关于线程的博客/教程,但是有一句话让我感到困惑:
for (auto& thread : threads)
我不太确定那个是做什么的
这是我所提到的博客链接 LINK
感谢任何回答我的问题的人
附注:你能否也给我一个参考资料,让我可以了解它的作用以及其他相关的事情?当我搜索时似乎眼盲了
C++11引入了一种新的迭代语句,称为所谓的基于范围的for
循环。它不同于普通的for
循环,它只给出了访问范围成员的权限,而不需要显式地命名范围本身或使用代理迭代器对象。具体来说,在迭代过程中不应该改变范围,因此这个新循环记录了"查看每个范围元素"的意图,而不对范围本身进行复杂操作。
语法是这样的:for (decl x : r) { /* body */ }
,其中decl
表示某个声明,r
是任意表达式。这在功能上与传统的循环大致等效:
{
auto && __r = r;
using std::begin;
using std::end;
for (auto __it = begin(__r), __e = end(__r); __it != __e; ++__it)
{
decl x = *it;
/* body */
}
}
作为一种特殊情况,数组和花括号列表也被本地支持。
std::begin
和std::end
,因此不需要包含<iterator>
;(2)它不执行非成员begin
和end
的普通未限定名称查找,只执行ADL。 - T.C.for
循环。 - Kerrek SBbegin
和 end
被用于分开的声明语句,而且不再需要拥有相同的类型。 - ascheplerbegin()
和 end()
或begin()
和 end()
这个
for ( for_range_declaration : expression ) statement;
扩展为
range_init = (expression)
{
auto && __range = range_init;
for ( auto __begin = begin_expr,
__end = end_expr;
__begin != __end;
++__begin ) {
for_range_declaration = *__begin;
statement;
}
}
其中begin_expr和end_expr是通过数组检查或begin()
/end()
对获取的。(这里的statement
可以是带花括号的复合语句。)
for (thread : threads)
在C++17中将成为可能。 - chris