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;
  • 相关阅读:
    HTTP request smuggling
    Do you really know CSS linear-gradients?
    Populating the page: how browsers work
    船舶智能管理系统API文档
    DocGuarder
    BUC LNB 器件
    BUC 与 LNB 的区别
    EIRP G/T 的意义
    语音的频率、频率分辨率、采样频率、采样点数、量化、增益
    机械波、电磁波的异同
  • 原文地址:https://www.cnblogs.com/zoneofmine/p/7214369.html
Copyright © 2011-2022 走看看