当前位置: 首页 > article >正文

C++ 17 允许在 for 循环,if 语句,switch 语句中初始化变量

看到 c++ 有这个特性,python 和 java 似乎都没有,根据 AI 的回答进行了一些整理总结。

文章目录

    • **1. 在 `for` 循环中初始化变量**
      • **特点**
      • **多个变量初始化**
    • **2. 在 `if` 语句中初始化变量(C++17 及以上)**
      • **示例**
      • **特点**
    • **3. 在 `switch` 语句中初始化变量(C++17 及以上)**
      • **特点**
    • **4. `while` 语句不支持变量初始化**
    • **5. `for` 语句的尾端变量初始化(C++17)**
      • **特点**
    • **6. C++17 变量初始化的优势**
    • **7. 总结**
      • ✅ **适用的语法(C++17 及以上)**
      • ✅ **C++17 变量作用域优化的好处**

在 C++ 中,允许在 for 循环和 if 语句、switch 语句中初始化变量,这是 C++17 引入的一项重要特性,称为 “语句作用域变量”

这不仅提高了代码的可读性,还能减少变量的作用域,避免不必要的变量污染。

1. 在 for 循环中初始化变量

for 语句的第一部分,我们通常用它来初始化循环变量

for (int i = 0; i < 5; i++) {std::cout << i << " ";
}

特点

  • int i = 0; 作用域仅限于 for 语句,不会影响外部作用域。
  • i 在循环结束后不可用
    std::cout << i;  // ❌ 错误:i 在此作用域不可见
    

多个变量初始化

for (int i = 0, j = 10; i < j; i++, j--) {std::cout << "i = " << i << ", j = " << j << std::endl;
}

特点:

  • ij 作用域仅限于 for 语句,在 for 之外不可见。
  • 适用于两个变量协同控制循环

2. 在 if 语句中初始化变量(C++17 及以上)

C++17 允许在 if 语句中初始化变量,使变量的作用域仅限于该 if 语句及其 else 块,避免污染外部作用域。

示例

if (int x = 10; x > 5) { // 在 if 语句中声明 xstd::cout << "x is greater than 5: " << x << std::endl;
} else {std::cout << "x is 5 or less: " << x << std::endl;
}// std::cout << x; // ❌ 错误:x 在此作用域不可见

特点

  • x 只在 ifelse 块内有效,超出作用域后会被销毁
  • 避免变量作用域污染,提高代码安全性

3. 在 switch 语句中初始化变量(C++17 及以上)

C++17 也允许在 switch 语句的条件部分声明变量:

switch (int n = 3; n) {case 1: std::cout << "n is 1"; break;case 3: std::cout << "n is 3"; break;default: std::cout << "Unknown"; break;
}// std::cout << n; // ❌ 错误:n 作用域仅限于 switch 语句

特点

  • n 仅在 switch 语句内有效。
  • 避免全局变量的作用域污染

4. while 语句不支持变量初始化

不同于 ifswitchwhile 不支持 while (int x = 5; x > 0) 这样的写法:

// ❌ 错误:C++ 不允许 while 语句中初始化变量
while (int x = 10; x > 0) { std::cout << x << std::endl;x--; // 变量 x 在每次循环都会被重新初始化为 10
}

正确的做法

int x = 10;
while (x > 0) {std::cout << x << std::endl;x--;
}

5. for 语句的尾端变量初始化(C++17)

C++17 允许在 for 语句的条件部分和更新部分声明变量:

for (int i = 0; bool condition = (i < 5); int j = i * 2, i++) {  std::cout << "i = " << i << ", j = " << j << std::endl;
}

特点

  • bool condition = (i < 5); 在循环条件部分初始化变量
  • int j = i * 2, i++ 在更新部分初始化变量
  • 变量 conditionj 作用域仅限于 for

6. C++17 变量初始化的优势

传统写法C++17 写法
变量在 if 语句外部定义,可能影响其他代码变量的作用域被限制,仅限 if 语句内
可能无意间修改变量,导致难以调试的错误避免变量作用域污染,提高可读性
switch 语句必须在外部定义变量switch 语句可以直接在表达式部分定义变量
for 只能在初始化部分声明变量for 语句的 条件部分和更新部分 也能声明变量

7. 总结

适用的语法(C++17 及以上)

if (初始化变量; 条件) { ... }
switch (初始化变量; 变量) { ... }
for (初始化变量; 条件; 更新部分) { ... }

不能用于 whiledo-while

C++17 变量作用域优化的好处

  1. 避免作用域污染:变量仅在 if / switch / for 内部有效。
  2. 提升可读性:减少不必要的外部变量声明,使代码更紧凑。
  3. 减少不必要的变量声明,提高代码简洁度。

这项特性在 C++17 之后 非常实用,让代码更现代化,减少潜在的变量作用域污染!🚀

相关文章:

C++ 17 允许在 for 循环,if 语句,switch 语句中初始化变量

看到 c 有这个特性&#xff0c;python 和 java 似乎都没有&#xff0c;根据 AI 的回答进行了一些整理总结。 文章目录 **1. 在 for 循环中初始化变量****特点****多个变量初始化** **2. 在 if 语句中初始化变量&#xff08;C17 及以上&#xff09;****示例****特点** **3. 在 s…...

Pycharm中怎么加快下载三方包速度

Pycharm中怎么加快下载三方包速度 使用命令行下载,-i pip install transformers -i https://mirrors.aliyun.com/pypi/simple/ 在Windows系统的PyCharm中使用Python 3.12环境时,可通过以下几种方式配置不同镜像源来加快下载包的速度。 方式一:在PyCharm界面中直接配置镜…...

Transformer 代码剖析7 - 词元嵌入(TokenEmbedding) (pytorch实现)

一、类定义与继承关系剖析 1.1 代码结构图示 #mermaid-svg-9COHbtmHJhpiroHM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-9COHbtmHJhpiroHM .error-icon{fill:#552222;}#mermaid-svg-9COHbtmHJhpiroHM .error-t…...

Unity中动态切换光照贴图的方法

关键代码&#xff1a;LightmapSettings.lightmaps lightmapDatas; LightmapData中操作三张图&#xff1a;lightmapColor,lightmapDir,以及一张ShadowMap 这里只操作前两张&#xff1a; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public cl…...

【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter27-工作者线程

二十七、工作者线程 工作者线程 前端开发者常说&#xff1a;“JavaScript 是单线程的。”这种说法虽然有些简单&#xff0c;但描述了 JavaScript 在浏览器中的一般行为。因此&#xff0c;作为帮助 Web 开发人员理解 JavaScript 的教学工具&#xff0c;它非常有用。单线程就意味…...

Qt基于等待条件QWaitCondition实现的任务队列模型示例

核心概念 Qt中的QWaitCondition是一个用于多线程同步的类&#xff0c;允许线程在某些条件满足时唤醒其他等待的线程。它通常与QMutex配合使用&#xff0c;协调线程之间的执行顺序&#xff0c;适用于生产者-消费者模型、任务队列调度等场景。 ​wait()&#xff1a;使当前线程进…...

本地大模型编程实战(26)用langgraph实现基于SQL数据构建的问答系统(5)

本文将将扩展上一篇文章完成的 langgraph 链&#xff0c;继续使用基于 langgraph 链 &#xff0c;对结构化数据库 SQlite 进行查询的方法。该系统建立以后&#xff0c;我们不需要掌握专业的 SQL 技能&#xff0c;可以用自然语言询问有关数据库中数据的问题并返回答案。主要完善…...

【RAG生成】生成模块核心技术解密:从理论到实践的全链路优化

RAG知识系列文章 【RAG实践】手把手Python实现搭建本地知识问答系统【RAG进阶】从基础到模块化&#xff1a;深度解析RAG技术演进如何重塑AI知识边界【RAG检索】RAG技术揭秘&#xff1a;检索≠召回&#xff1f;【RAG增强】解密RAG系统排序优化&#xff1a;从基础原理到生产实践…...

近似最近邻(ANN)算法库实战

引言&#xff1a;从“精确”到“近似”的思维跃迁 在电商推荐系统中&#xff0c;每秒需要为上百万用户找到最相关的商品——传统KNN的暴力搜索甚至无法完成一次查询&#xff0c;而近似最近邻&#xff08;ANN&#xff09;算法库如Faiss&#xff08;Facebook&#xff09;和Annoy…...

Linux与UDP应用2:简易聊天室

UDP应用2&#xff1a;简易聊天室 本篇介绍 在前面的基本使用过程中已经完成了本地和网络通信&#xff0c;既然一个人和一台服务器可以进行通信&#xff0c;那么多个人连接一台服务器也可以和这台服务器实现通信。在这个基础上&#xff0c;如果服务器可以将某个人发给服务器的…...

张雪峰教育观点及争议分析

李升伟 整理 张雪峰&#xff08;网络常用名&#xff0c;本名张子彪&#xff09;是中国知名的考研辅导教师、教育领域自媒体人&#xff0c;因其幽默犀利的语言风格和直击痛点的教育观点走红网络。以下是对他的基本介绍及综合评价&#xff1a; --- ### **一、基本情况** 1. **个…...

从0开始的IMX6ULL学习篇——裸机篇之分析粗略IMX6ULL与架构

目录 简单的说一下Cortex-A7架构 讨论ARMv7a-cortex系列的运行模式 寄存器 后言 让我们到NXP的官网上扫一眼。 i.MX 6ULL应用处理器_Arm Cortex-A7单核&#xff0c;频率为900 MHz | NXP 半导体 我们先看CPU Platform&#xff0c;这个是我们的核心。 这里我们的芯片是基于Ar…...

面向实时性的超轻量级动态感知视觉SLAM系统

一、重构后的技术架构设计(基于ROS1 ORB-SLAM2增强) #mermaid-svg-JEJte8kZd7qlnq3E {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-JEJte8kZd7qlnq3E .error-icon{fill:#552222;}#mermaid-svg-JEJte8kZd7qlnq3E .…...

Hue UI展示中文

个人博客地址&#xff1a;Hue UI展示中文 | 一张假钞的真实世界 如果使用开发分支代码如master分支&#xff09;编译安装&#xff0c;需要自己编译语言文件。例如Hue安装目录为“/opt/hue”&#xff0c;则安装后执行以下命令&#xff1a; $ cd /opt/hue $ make locales 如果…...

C#贪心算法

贪心算法&#xff1a;生活与代码中的 “最优选择大师” 在生活里&#xff0c;我们常常面临各种选择&#xff0c;都希望能做出最有利的决策。比如在超市大促销时&#xff0c;面对琳琅满目的商品&#xff0c;你总想用有限的预算买到价值最高的东西。贪心算法&#xff0c;就像是一…...

【新人系列】Python 入门专栏合集

✍ 个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4dd; 专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12801353.html &#x1f4e3; 专栏定位&#xff1a;为 0 基础刚入门 Python 的小伙伴提供详细的讲解&#xff0c;也欢迎大佬们…...

SQL命令详解之数据的查询操作

目录 1 简介 2 基础查询 2.1 基础查询语法 2.2 基础查询练习 3 条件查询 3.1 条件查询语法 3.2 条件查询练习 4 排序查询 4.1 排序查询语法 4.2 排序查询练习 5 聚合函数 5.1 一般语法&#xff1a; 5.2 聚合函数练习 6 分组查询 6.1 分组查询语法 6.2 分组查询…...

序列化选型:字节流抑或字符串

序列化既可以将对象转换为字节流&#xff0c;也可以转换为字符串&#xff0c;具体取决于使用的序列化方式和场景。 转换为字节流 常见工具及原理&#xff1a;在许多编程语言中&#xff0c;都有将对象序列化为字节流的机制。例如 Python 中的 pickle 模块、Java 中的对象序列化…...

使用C#控制台调用本地部署的DeepSeek

1、背景 春节期间大火的deepseek&#xff0c;在医疗圈也是火的不要不要的。北京这边的医院也都在搞“deepseek竞赛”。友谊、北医三院等都已经上了&#xff0c;真是迅速啊&#xff01; C#也是可以进行对接&#xff0c;并且非常简单。 2、具体实现 1、使用Ollama部署DeepSeek…...

Linux环境安装Nginx及版本升级指南

Linux环境安装Nginx及版本升级指南 一、安装Nginx 1. 安装前准备 # 更新系统软件包&#xff08;Ubuntu/Debian&#xff09; sudo apt update && sudo apt upgrade -y# CentOS/RHEL sudo yum update -y2. 安装依赖库 # Ubuntu/Debian sudo apt install -y curl wget…...

选开源CMS建站系统时,插件越多越好吗?

在选择开源CMS建站系统时&#xff0c;插件数量并不是唯一的衡量标准&#xff0c;更不能简单地说“插件越多就越好”&#xff0c;还是需要综合评估来考虑选择结果&#xff0c;以下是有关选择开源CMS系统时对插件数量的考量。 插件数量的优势插件数量可能带来的问题功能丰富性&a…...

Windows对比MacOS

Windows对比MacOS 文章目录 Windows对比MacOS1-环境变量1-Windows添加环境变量示例步骤 1&#xff1a;打开环境变量设置窗口步骤 2&#xff1a;添加系统环境变量 2-Mac 系统添加环境变量示例步骤 1&#xff1a;打开终端步骤 2&#xff1a;编辑环境变量配置文件步骤 3&#xff1…...

使用 Python 实现基于 AGA8 GERG - 2008 方程计算掺氢天然气压缩因子的示例代码

AGA8 GERG - 2008 方程是用于计算天然气混合物热力学性质的一种方法&#xff0c;下面是一个使用 Python 实现基于 AGA8 GERG - 2008 方程计算掺氢天然气压缩因子的示例代码。需要注意的是&#xff0c;AGA8 GERG - 2008 方程非常复杂&#xff0c;完整实现需要大量的系数和详细的…...

开源绝版经典小游戏合集

随着生活节奏的日益加快&#xff0c;我们常常需要一些小游戏来缓解疲惫的身心。过去&#xff0c;Windows 7自带的扫雷、蜘蛛纸牌等小游戏深受大家喜爱&#xff0c;但随着系统的更新换代&#xff0c;这些经典游戏逐渐淡出了人们的视野。我也曾花费不少时间寻找这些游戏&#xff…...

给虚拟机配置IP

虚拟机IP这里一共有三个地方要设置&#xff0c;具体说明如下&#xff1a; &#xff08;1&#xff09;配置vm虚拟机网段 如果不进行设置&#xff0c;每次启动机器时都可能是随机的IP&#xff0c;不方便我们后续操作。具体操作是&#xff1a;点击编辑→虚拟网络编辑器 选择VMne…...

YOLOv12以注意力机制为核心的架构:主要特点、创新点、使用方法

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

GD32F450 使用

GB32F450使用 1. 相关知识2. 烧写程序3. SPI3.1 spi基础3.2 spi代码 4. 串口4.1 串口引脚4.2 串口通信代码 问题记录1. 修改晶振频率 注意&#xff1a;GD32F450 总共有三种封装形式&#xff0c;本文所述的相关代码和知识&#xff0c;均为 GD32F450IX 系列。 1. 相关知识 参数配…...

Linux 动静态库和_make_进度条(一)

文章目录 一、如何理解条件编译二、动静态库1. 理论2. 实践3. 解决普通用户的sudo问题4. 技术上理解库 三、make和make_file 一、如何理解条件编译 1. gcc code.c -o code -DM 命令行级别的宏定义预处理的本质就是修改编辑我们的文本代码 头文件展开到源文件中去注释宏替换条…...

Android 图片压缩详解

在 Android 开发中,图片压缩是一个重要的优化手段,旨在提升用户体验、减少网络传输量以及降低存储空间占用。以下是几种主流的图片压缩方法,结合原理、使用场景和优缺点进行详细解析。 效果演示 直接先给大家对比几种图片压缩的效果 质量压缩 质量压缩:根据传递进去的质…...

C# 牵手DeepSeek:打造本地AI超能力

一、引言 在人工智能飞速发展的当下&#xff0c;大语言模型如 DeepSeek 正掀起新一轮的技术变革浪潮&#xff0c;为自然语言处理领域带来了诸多创新应用。随着数据隐私和安全意识的提升&#xff0c;以及对模型部署灵活性的追求&#xff0c;本地部署 DeepSeek 成为众多开发者和…...