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

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 语句中声明 x
    std::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 之后 非常实用,让代码更现代化,减少潜在的变量作用域污染!🚀

相关文章:

  • VSCode如何备份与恢复 VSCode 插件
  • 智能图像处理平台:图片管理
  • 网络安全与等保2.0
  • springmvc热点面试题开胃菜
  • Redis 哈希(Hash)
  • Linux基础IO
  • 基于ai技术的视频生成工具
  • Jeecg-Boot 开放接口开发实战:在 Jeecg-Boot 的jeecg-system-biz中添加一个controller 实现免鉴权数据接口
  • 基于Apollo对配置类的热更新优化
  • qt-C++笔记之Linux下Qt环境变量设置及与QtCreator的关系
  • C语言标准IO是什么?
  • ffmpeg-static 依赖详解
  • 给wordpress仪表盘添加自定义图标
  • B/B+树与mysql索引
  • 什么是“零日漏洞”(Zero-Day Vulnerability)?为何这类攻击被视为高风险威胁?
  • 009 rocketmq延时消息
  • 机器学习:监督学习、无监督学习和强化学习
  • C语言【指针篇】(四)
  • 开发环境需要同时安装2个nodejs版本
  • 25年前端如何走的更稳
  • 欧美网站模板下载/网站优化网络推广seo
  • 2017年做那个网站致富/最好的推广平台是什么软件
  • wordpress登录js/成都网站seo服务
  • 南宁市营商环境建设局网站/中文网站排行榜
  • 学校网站建设工作内容/济宁做网站的电话
  • 网站基本信息设置/广州网络推广选择