C++ Primer 笔记——语句

switch 内部的变量定义

1.因为C++语言规定,不允许跨过变量的初始化语句直接跳转到该变量作用域内的另一位置,所以有了如下情况:

bool bsuccess = false;
switch (bsuccess)
{
case true:
    std::string str;    // 错误,定义了一个隐式初始化的变量
    int i = 0;            // 错误,定义了一个显示初始化的变量
    int j;                // 正确,因为j没有初始化
    {
        std::string str1;    // 正确,声明语句位于语句块内部
    }
    break;
case false:
    j = 1;                // 正确,给j赋值
    if (str.empty())    // 错误,str在作用域内,但是没有初始化
    {
    }
    if (str1.empty())    // 错误,str1不在作用域内
    {
    }
    break;
default:
    break;
}

 

2. switch语句里不能够使用 continue 语句,除非它内嵌在其他的迭代语句之中。

 

goto 语句

1.和switch语句类似,goto语句也不能将程序的控制权从变量的作用域之外转移到作用域之内。

    goto end;
    int i = 0;        // 错误,goto语句绕过了一个带初始化的变量定义

end:
    i = 1;            // 错误,此处使用i,但是goto语句绕过了它的声明

但是以上语句可以在VS2015编译通过


2.向后跳过一个带初始化的变量定义是合法的,跳回到变量定义之前意味着系统将销毁该变量,然后重新创建它。

begin:
    int i = 10;
    // ...
    if (i <= 0)
        goto begin;

 

转载于:https://www.cnblogs.com/zoneofmine/p/7214369.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值