default 不同位置

笔试被default摆了一道QAQ,之前都是用常规用法,不太清楚default不同位置会有什么影响
先说结论:default可以看作是一种case,即不在列出范围内的case。

case穿透

首先我们要知道,switch 语句中有一个穿透机制,如果任何一个case没有写break,他会从匹配的case向下执行所有case(即使条件不匹配) 知道遇到break;

void func(int n) {
    switch (n) {
    case 1:
        n++;
        cout << "1:" << n << endl;
    case 0:
        n++;
        cout << "0:" << n << endl;
    case 9:
        n++;
        cout << "9:" << n << endl;
    default:
        cout << "default" << endl;
        break;
    }
}

func(0);//看出从进入case后如果没有break 会一直贯穿不符合9也继续
func(1); //default也一样会被贯穿

可以看出对于func(0)执行后,即使不满足case 9的条件也会执行。

default = case

无论default放哪(虽然默认放最后,我的理解是利于代码的可读性)都和case一样,就像写代码时不会刻意的注意case条件的顺序(当然按照顺序更好)

void func1(int n) {
    switch (n) {
    case 1:
        n++;
        cout << "1:" << n << endl;
    default:
        cout << "default" << endl;
    case 0:
        n++;
        cout << "0:" << n << endl;
    case 9:
        n++;
        cout << "9:" << n << endl;

    }
}

func1(8);//default只是一种默认的除去已有case的case,和其他case一致

其实default也类似一个case,写在哪不重要,和case一样会发生穿透,可以利用break阻止或者合理的利用穿透。

欢迎指正AvA ~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值