C 11 基于范围的循环的幕后
基于范围的循环提供了一种简洁的语法来迭代集合的元素,但它们的内部工作原理可能不会立即显现出来。
变量初始化
虽然循环变量(在本例中为 x)似乎只初始化一次,现实是不同的。在基于范围的循环中,例如:
<code class="cpp">for (const int x : vec) { cout << x << endl; }</code>
编译器为每次迭代创建一个新的局部变量 x。它将 x 初始化为 vec 向量中下一个元素的值。
常量变量
尽管被声明为 const,但 x 变量在每次迭代中似乎都会发生变化因为它不是同一个变量。每个新创建的 x 都会分配给 vec 的下一个元素,给人一种正在修改同一个变量的错觉。
实现细节
实现了基于范围的循环使用迭代器,迭代器是提供对集合元素的访问的对象。在上面的代码中,vec 有一个由 begin() 和 end() 函数返回的迭代器。迭代器用于遍历元素,x 被赋值给迭代器指向的值。
附加说明
以上是C 11 基于范围的循环在幕后是如何工作的?的详细内容。更多信息请关注PHP中文网其他相关文章!