C++20新特性_范围 `for` 循环的初始化语句

文章目录

  • [第一章 C++20核心语法特性](#第一章 C++20核心语法特性)
    • [1.8 范围 `for` 循环的初始化语句](#1.8 范围 for 循环的初始化语句)
      • [1.8.1 语法格式](#1.8.1 语法格式)
      • [1.8.2 示例](#1.8.2 示例)

本文记录C++20新特性之范围 for 循环的初始化语句。

第一章 C++20核心语法特性

1.8 范围 for 循环的初始化语句

在 C++17 中,标准委员会为 if 和 switch 语句引入了初始化语句(例如 if (auto val = getVal(); val > 0)),这极大地优化了变量的作用域控制。

到了 C++20,这一优秀的特性终于被扩展到了 范围 for 循环 (Range-based for loop) 中。这虽然是一个语法上的小糖果,但对于写出"高内聚、低耦合"的代码有着重要的意义。

1.8.1 语法格式

语法格式:

cpp 复制代码
for (初始化语句; 范围声明 : 范围表达式) {
    // 循环体
}

初始化语句:只执行一次。在这里定义的变量,其生命周期贯穿整个循环(包括循环体),并在循环结束时自动销毁。

作用域:变量仅在循环内部可见,不会泄漏到外部。

1.8.2 示例

示例1:解决索引变量的作用域问题

下面将索引变量限制在 for 循环作用域内。

cpp 复制代码
    void test()
    {
		vector<int> vec = { 1,2,3,4,5 };

        for (int index = 0; const auto& v : vec)
        {
            std::cout << "Index " << index << ": " << v << std::endl;
			++index;
        }
        /*
            Index 0: 1
            Index 1: 2
            Index 2: 3
            Index 3: 4
            Index 4: 5
        
        */
    }

示例2:配合C++20Ranges视图

虽然 C++20 的 Ranges 库本身就很强大,但有时我们需要在管道操作前定义一些辅助常量。

cpp 复制代码
    void test()
    {
        // 
		std::vector<int> vec = { 10,20,30,40,50 };

        // 
        for (int threadhold = 30; int i : vec | std::views::filter([threadhold](int n) {
            return n > threadhold;
            }))
        {
			cout << i << " ";
        }
        cout << endl;
        // 40 50
    }
相关推荐
小小龙学IT2 天前
C++ std::chrono 时间库深度解析:从 duration 模板到 C++20 日历与时区
linux·c++·c++20
郝学胜-神的一滴4 天前
C++20 高级编程 004:从初始化、内存到const系列关键字
开发语言·算法·编程·软件构建·c++20
可爱系程序猿4 天前
msvcp120.dll 加载失败排查:VC++ 2013、进程架构与插件私有目录如何对应
程序人生·电脑·c++20
ShineWinsu4 天前
对于C++:C++20中线程、初始化、Lambda与内存视图等特性的解析
c++·c++20
可爱系程序猿5 天前
mfc100.dll 加载失败排查:旧版 VC++ 2010 程序、位数与插件目录如何核对
程序人生·电脑·c++20
ShineWinsu8 天前
对于 C++:C++20中Concept(概念) 与 Coroutine(协程)的解析
linux·开发语言·网络·c++·c++20·epoll
Lzg_na15 天前
C++20 Concept 核心概念、语法详解与三大工程实践场景
c++20
Billy1213815 天前
Day14-C++20 Modules:模块声明与导入、模块分区、与头文件对比、迁移策略
c++20·c++进阶学习
程序猿编码15 天前
不用GPU,不用多线程,我用C++20手写了一个Gemma 3推理引擎
pytorch·语言模型·大模型·c++20·推荐算法
Billy1213817 天前
Day15-C++20 三路比较运算符 `<=>`:一次定义,全面排序
c++20·c++进阶学习