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) {
            // ...
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值