C++20 让 for 循环写法更优雅

C++20 Improved the For-Loop Syntax

5jpmitchell💬 3

作为一名程序员,我最近发现 C++20 引入的一个小特性彻底改变了我写循环的方式。过去在 C++17 或更早版本中,如果想同时获取索引和元素,往往需要手动管理索引变量,代码显得冗长且不够直观。而 Python 和 Lua 等语言早已支持这种简洁写法。现在,借助 C++20 的 Range-based for statements with initializer 提案,我们终于能在 C++ 中实现类似的效果:for (int i=0; auto&& it: vec) 这样的语法既简洁又强大。虽然这只是一个小小的语法糖,但在整个代码库中广泛使用时,能显著提升可读性和开发效率。我也打算以后全面采用这种新写法。C++ 标准委员会确实在不断为语言注入实用且贴心的功能,你有没有发现类似提升生活质量的小特性?欢迎分享!

"虽然这只是一个小小的语法糖,但在整个代码库中广泛使用时,能显著提升可读性和开发效率。"

HN 评论区

  • 有评论者指出该写法命名变量为 'it' 却非迭代器,属于糟糕的命名风格,且语法结构易被误读为两条独立语句,降低了代码可读性。
  • 一位 D 语言开发者认为 C++ 应借鉴 D 语言的 foreach 语法,其对数组和 range 的统一处理能实现更优雅的数组与范围互操作。
  • 有从业者批评 C++ 标准委员会通过持续引入半成品的特性来破坏语言生态,认为这种策略可能是为 Rust 的普及扫清障碍。
  • 多位开发者反驳称该特性并非 C++20 内容,真正的优雅解法是 C++23 引入的 std::views::enumerate,能实现类似 Python 的枚举功能。
  • 有资深开发者表示宁愿坚持 C++98 甚至 C 语言风格,认为现代 C++ 试图将语言彻底重构的尝试导致了代码复杂度和维护难度的增加。

同日更多故事 · 2026-07-15