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

if/switch语句初始化功能

基础介绍

这个特性是在c++17版本引入的,在这之前是不允许在if语句或者switch语句中使用赋值语句,不仅仅是if语句和switch语句,包括lambda表达式在c++17版本也支持类在捕获表达式中支持赋值操作。言归正传,下面阐述这个特性的基本语法:

// 传统写法
T value = getValue();
if (value) {// 使用 value
}// C++17 新语法
if (T value = getValue(); value) {// 使用 value
}

通过上面的基本语法可以看到在c++17之前value的获取必须在if之前完成,如果将像c++17版本的写法,编译器会报错。

作用域控制

这个特性很简单,不需要过多的讲解,但是有一点需要注意,即如果在if语句或者switch语句中采用了初始化的新特性,那这个符号作用是什么呢?直接给出答案:

  1. 对于if语句,初始化的变量的作用域是整个if/else语句块,在外部无法使用这个变量,谨记else这个变量有效的,这个很容易搞错
  2. 对于switch语句,初始化的变量作用域是整个switch语句块,在swtich语句块的外部无法访问这个变量

使用建议

  • 仅建议如果初始化过程简单可以考虑采用这种方式,如果初始化逻辑特别复杂,不建议使用该特性。
  • 多重嵌套的if语句也不建议使用该特性,请看下面的例子
// 不推荐
if (auto x = foo(); x > 0) {if (auto y = bar(); y > 0) {if (auto z = baz(); z > 0) {// ...}}
}
http://www.xdnf.cn/news/361.html

相关文章:

  • MySQL内置函数:字符串函数,数值函数,日期函数,流程控制函数
  • 【unity实战】Unity动画层级(Animation Layer)的Sync同步和Timing定时参数使用介绍,同步动画层制作角色的受伤状态
  • 数据结构基本概念
  • 如何导出pip下载的paho-mqtt包
  • 1.了解开发行业
  • 解析:深度优先搜索、广度优先搜索和回溯搜索
  • OPC Client第3讲(wxwidgets):wxFormBuilder;基础框架;事件处理
  • JavaScript 所有操作数组的方法
  • Spring Bean 全方位指南:从作用域、生命周期到自动配置详解
  • pip 的包下载之后存放在哪?
  • 【AI提示词】退休规划顾问专家
  • SonarQube 集成教程
  • Python读取Excel表格数据并写成JSON格式文件(精简版)
  • 3.指令与权限
  • 4.6 实现重定向
  • Python基础知识语法归纳总结(数据类型-1)
  • 三格电子——CAN 转光纤(点对点)布线常见问题
  • Function Calling的时序图(含示例)
  • 2025年第十六届蓝桥杯Python程序设计赛道B组
  • 启动vite项目报Unexpected “\x88“ in JSON
  • Vue 开发实战:从入门到精通的经验之谈
  • Seed-Thinking-v1.5:推理模型新标杆诞生
  • 实用工具-screenrec介绍(截图工具)
  • 【AI图像创作变现】01文生图原理与提示词结构
  • 如何查看自己的主机地址
  • vue3中ref创建的变量使用`.value`(可以使用volar插件自动添加`.value)
  • 4月18日复盘
  • 1.Three.js 场景(Scene)详解
  • Ext系列⽂件系统
  • Attention 机制核心 - Transformer 的基石