zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    NOI2.5 4980:拯救行动
    NOI2.5 1490:A Knight's Journey
    NOI2.5 8465:马走日
    考试题目“部落卫队”
    考试题目“笨笨的西瓜种植”
    考试题目“笨笨玩游戏”
    NOI4.6 1455:An Easy Problem
    NOI2.5 1253:Dungeon Master
    NOI2.2 8758:2的幂次方表示
    NOI2.5 1817:城堡问题
  • 原文地址:https://www.cnblogs.com/zoneofmine/p/7214369.html
Copyright © 2011-2022 走看看