C++11 introduced a new iteration statement, the so-called range-based for
loop. It differs from the ordinary for
loop in that it only gives you access to the members of a range, without requiring you to name the range itself explicitly and without using proxy iterator objects. Specifically, you are not supposed to mutate the range during the iteration, so this new loop documents the intent to "look at each range element" and not do anything complicated with the range itself.
The syntax is this: for (decl x : r) { /* body */ }
, where decl
stands for some declaration and r
is an arbitrary expression. This is functionally mostly equivalent to the following traditional loop:
{
auto && __r = r;
using std::begin;
using std::end;
for (auto __it = begin(__r), __e = end(__r); __it != __e; ++__it)
{
decl x = *it;
/* body */
}
}
As a special case, arrays and braced lists are also supported natively.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…