C++20改进for循环语法:小特性带来大便利!

📅 发布时间:2026/7/16 3:10:15
C++20改进for循环语法:小特性带来大便利! C20 如何改进 for 循环语法这是 C20 带来的一小处语法糖。假设要输出以下内容1: the2: quick3: brown4: fox5: jumped6: over7: the8: lazy9: dog若使用 Python会这样写vec [the, quick, brown, fox,jumped, over, the, lazy, dog]for i, it in enumerate(vec, start1):print(f{i}: {it})若使用 Lua代码可能如下local vec {the, quick, brown, fox,jumped, over, the, lazy, dog}for i, it in ipairs(vec) doprint(i .. : .. it)end但要是使用 C17 或更早的版本等效的实现如下vector vec {the, quick, brown, fox,jumped, over, the, lazy, dog};for (int i 0; i vec.size(); i){auto it vec[i];cout i : it endl;}这些示例的共同点是它们都生成了一个 for 循环该循环的作用域中同时包含索引值和元素引用。C 的不同之处在于它需要额外的语句将引用引入循环作用域。有了 C20现在能写出与其他语言类似的示例代码如下vector vec {the, quick, brown, fox,jumped, over, the, lazy, dog};for (int i0; auto it: vec)cout (i) : it endl;实现这一功能的具体提案名为[带初始化器的基于范围的 for 语句](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0614r0.html)它与 C17 的一个提案[带初始化器的 if 语句](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0305r0.html)非常相似。本文展示的正是该语言特性的预期使用场景。真的很喜欢这个特性。它看似微不足道但在整个代码库中使用时这样的小语法糖会带来很大的便利。自己也是刚发现这个特性不过今后打算只使用这种方式而不再用传统方法。在我看来C 标准委员会在维护这门语言方面做得相当不错会在合适的时候引入实用的特性。你是否也发现了类似提升开发体验的小特性呢如果有欢迎告诉我可以发邮件至 [maillzon.ca](mailto:maillzon.ca)或者在[主页](/)上的社交媒体账号给我私信。主题主要次要第三隐私设置