C++ Primer阅读笔记--语句的使用

news2024/9/22 15:51:37

① 空语句

        最简单的语句是空语句,其只含有一个单独的分号;

② switch语句

        case 关键字和它对应的值一起被称为 case 标签,case 标签必须是整型常量表达式;

char ch = getVal();
int iVal = 42;
switch(ch){
    case 3.14: // 错误,case标签不是一个整数
    case ival: // 错误,case标签不是一个常量
    ……
}

③ 范围 for 语句

        C++11 新标准引入了范围 for 语句,其可以遍历容器或其它序列的所有元素;

       expression 表示的必须是一个序列,其可以为用花括号括起来的初始化列表、数组、或 vector 和 string 等类型的对象,这些对象的特点是拥有能返回迭代器的 begin 和 end 成员;

        declaration 定义一个变量,序列中的每个元素都得能转换成该变量的类型,一般使用 auto 类型说明符声明变量;如果需要对序列中的元素执行写操作,循环变量必须声明成引用类型;

for (declaration : expression)
    statement

std::vector<int> v = {0, 1, 2, 3};
for (auto &r : v)
    r *= 2; // 将 v 中所有元素翻倍
// 范围 for 语句与以下传统 for 语句等价
for(auto beg = v.begin(), end = v.end(); beg != end; ++beg){
    auto &r = *beg;
    r *=2;
}
// 因此不能通过范围 for 语句增加 vector 对象的元素,因为范围 for 语句预存了 end() 的值;

④ break 语句和 continue 语句

        break 语句负责终止离它最近的while、do while、for 和 switch 语句,并从这些语句之后的第一条语句开始继续执行;

        continue 语句终止最近的循环中的当前迭代并立即开始下一次迭代,其只能出现在 for、while、do while或嵌套在此类循环里的语句或块的内部;

        break 语句的作用范围仅限于最近的循环或者 switch;出现在嵌套循环中的 continue 语句也仅作用于离它最近的循环;与 break 语句不同的是,只有当 switch 语句嵌套在迭代语句内部时,才能在 switch 里使用 continue 语句;

⑤ goto语句

        goto 语句的作用是从 goto 语句无条件地跳转到同一函数内的另一条语句;一般不建议在程序中使用 goto 语句,因为其能使程序变得难以理解和修改;

goto label;

// label 是用于标识一条语句的标示符,其定义的带标签语句如下:
label : xxxxx;    // xxxx为具体的语句

        goto 语句不能跳过带有初始化变量定义的语句,即下面的代码会出错,因为 goto 语句跳过了 int a = 30 这条带有初始化定义的语句;

// 错误代码如下:
#include "iostream"

int main(int argc, char* argv[]){
    goto label;
    int a = 30;
    std::cout << "a: " << a << std::endl;
    label :
        int b = 50;
        std::cout << "b: " << b << std::endl;

    return 0;
}

// 正确代码如下:
#include "iostream"

int main(int argc, char* argv[]){
    int a = 30;
    goto label;
    std::cout << "a: " << a << std::endl;
    label :
        int b = 50;
        std::cout << "b: " << b << std::endl;

    return 0;
}

⑥ 异常处理机制

        异常处理机制为程序中的异常检测和异常处理这两部分的协作提供支持;在 C++ 语言中,异常处理包括:throw表达式、try语句块和异常类;

        throw 表达式:异常检测部分使用 throw 表达式来表示其遇到的无法处理的问题,一般称为 throw 引发(raise)了异常;

        try 语句块:异常处理部分使用 try 语句块处理异常,其以关键字 try 开始,并以一个或多个 catch 子句结束;try语句块中抛出的异常通常会被某个 catch 子句处理,因此 catch 子句被称为异常处理代码;

        异常类:用于在 throw 表达式和相关的 catch 子句之间传递异常的具体信息;

        throw 表达式包含关键字 throw 和紧随其后的一个表达式,其中表达式的类型就是抛出的异常类型;

        抛出异常将终止当前函数,并把控制权转移给能处理该异常的代码;

// 当数据的 ISBN 不相同时,抛出一个 runtime_error 类型的异常对象
if(item1.isbn() != item2.isbn()){
    throw runtime_error("DATA must refer to same ISBN");
}

        try 语句块的通用语法形式如下,即由一个 try 块和一个或多个 catch 子句块组成; catch 子句包括三部分:关键字 catch、括号内一个对象的声明(称为异常声明)、一个块;

        当选中某个 catch 子句处理异常时,会执行与之对应的块;catch 一旦完成,程序跳转到 try 语句块最后一个 catch 子句之后的语句继续执行;

try{
    program-statements
} catch (exception-declaration){
    handler-statements
} catch (exception-declaration){
    handler-statements
}
// 代码实例
#include <iostream>
#include <stdexcept>

int main(int argc, char* argv[]){
    int color;
    std::cin >> color;
    std::cout << "your input is : " << color << std::endl;
    try{
        if (color > 255){
            // 抛出上溢错误
            throw std::overflow_error("上溢"); 
        } 
        else if(color < 0){
            // 抛出下溢错误
            throw std::underflow_error("下溢");
        }
    }
    // 捕获std::overflow_error的错误
    catch(std::overflow_error err1){ 
        color = 255;
    }
    // 捕获std::underflow_error的错误
    catch(std::underflow_error err2){ 
        color = 0;
    }
    std::cout << "Real valid data: " << color << std::endl;

    return 0;
}

         上述代码中,根据不同检测条件抛出了不同的异常,并由对应的 catch 语句进行处理;抛出的异常类型可以采用提供的标准异常,也可以自定义异常类型,上述代码中使用了由头文件 stdexcept 提供的两个标准异常类:std::overflow_error 和 std::underflow_error;

        当异常被抛出时,会搜索能够处理该异常的函数;当未能找到任何匹配的 catch 子句时,程序会调用 terminate 函数来中止程序;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/465222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ZmosHarmony buildroot移植与使用

前言 移植过程 1、添加编译选项编译buildroot。 2、开机启动时设置 LD库的环境变量与PATH路径。 是什么原因需要这样操作&#xff1f; 主要使用busybox&#xff0c;使用buildroot的瑞士军dao。 使用busybox 为buildroot下的使用 第一次启动时设置 由于是在vendor分区因此 …

01 openEuler虚拟化-KVM虚拟化简介

文章目录 01 openEuler虚拟化-KVM虚拟化简介1.1 简介1.2 虚拟化架构1.3 虚拟化组件1.4 虚拟化特点1.5 虚拟化优势1.6 openEuler虚拟化 01 openEuler虚拟化-KVM虚拟化简介 1.1 简介 在计算机技术中&#xff0c;虚拟化是一种资源管理技术&#xff0c;它将计算机的各种实体资源&…

ActiveMQ 反序列化漏洞 (CVE-2015-5254)漏洞复现

当前漏洞环境部署在vulhub,当前验证环境为vulhub靶场&#xff08;所有实验均为虚拟环境&#xff09; 实验环境&#xff1a;攻击机----kali 靶机&#xff1a;centos7 需要的jar包&#xff1a;jmet-0.1.0-all.jar 1、启动docker&#xff0c;进入vulhub&#xff08;靶机&#xff0…

centos主机测试io极限

这里使用fio工具来测试磁盘的io 1.安装fio命令 yum -y install fio 2.在需要测试的磁盘所挂载的目录下创建一个测试目录 由于我就只有一个磁盘&#xff0c;/目录也挂载在这个磁盘上&#xff0c;所以就直接在tmp目录里创建 mkdir /tmp/cs 3.创建一个名为 test.fio 的文件&a…

中级软件设计师备考---信息系统安全

目录 安全属性对称加密技术非对称加密技术信息摘要和数字签名数字信封和PGP各个网络层次的安全保障网络威胁与攻击防火墙技术 安全属性 保密性&#xff1a;最小授权原则、防暴露、信息加密、物理保密 完整性&#xff1a;安全协议、校验码、密码校验、数字签名、公证 可用性&a…

【 Spring 事务传播机制 】

文章目录 一、概念二、为什么需要事务传播机制&#xff1f;三、事务传播机制有哪些&#xff1f;四、Spring 事务传播机制使⽤和各种场景演示4.1 ⽀持当前事务&#xff08;REQUIRED&#xff09;4.2 不⽀持当前事务&#xff08;REQUIRES_NEW&#xff09;4.3 NESTED 嵌套事务4.4 嵌…

软考软件设计师 软件工程笔记

软件工程 CMM&#xff08;能力成熟度模型&#xff09;CMMI&#xff08;能力成熟度模型集成&#xff09;瀑布模型V模型&#xff08;质量保证&#xff09;增量模型演化模型&#xff08;迭代更新&#xff09;原型模型螺旋模型&#xff08;风险分析&#xff09;喷泉模型统一过程&am…

大数据编程实验二:熟悉常用的HDFS操作

实验目的 1、理解HDFS在Hadoop体系结构中的角色 2、熟悉使用HDFS操作常用的Shell命令 3、熟悉HDFS操作常用的Java API 实验平台 1、操作系统&#xff1a;Windows 2、Hadoop版本&#xff1a;3.1.3 3、JDK版本&#xff1a;1.84、Java IDE&#xff1a;IDEA 实验步骤 前期&#x…

Springboot整合WebSocket(纯后端)

文章目录 一、 HTTP协议与WebSocket区别二、客户端&#xff08;浏览器&#xff09;实现1、websocket对象2、websocket事件3、WebSocket方法 三、服务端实现1、连接过程2、服务端接收客户端消息3、服务端推送消息给客户端 四、后端功能实现 一、 HTTP协议与WebSocket区别 HTTP协…

如何在家自学编程成为一名程序员?

转自&#xff1a;如何在家自学编程&#xff0c;成为一名优秀的程序员&#xff1f; - 知乎 跟着黑马程序员学&#xff0c;自学也可以很优秀。先找到方向—>前/后端&#xff1f;测试&#xff1f;还是什么&#xff1f;—>找到相关的学习路线 —> 坚持不懈的学习 —> …

论文学习——Video LDM (Align your Latents)

Align your Latents: High-Resolution Video Synthesis with Latent Diffusion Models 0. 来源 本文是阅读论文后的个人笔记&#xff0c;适应于个人水平&#xff0c;叙述顺序和细节详略与原论文不尽相同&#xff0c;并不是翻译原论文。 如果想了解所有细节&#xff0c;建议移…

华为OD机试真题(Java),旋转数组的最小数字(100%通过+复盘思路)

一、题目描述 有一个长度为 n 的非降序数组&#xff0c;比如[1,2,3,4,5]&#xff0c;将它进行旋转&#xff0c;即把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;变成一个旋转数组&#xff0c;比如变成了[3,4,5,1,2]&#xff0c;或者[4,5,1,2,3]这样的。请问&#xf…

Filter 的使用

把对资源的请求拦截下来&#xff0c;从而实现一些特殊功能 &#xff0c;比如需要先登录再使用其他功能 拦截对资源的请求 放行后&#xff0c;执行完资源&#xff0c;再执行放行后的逻辑 按字符比较升序排序&#xff0c;值小的优先级高 FilterDemo优先级高于FilterDemo2 Listene…

华为OD机试真题(Java),最长的连续子序列(100%通过+复盘思路)

一、题目描述 有N个正整数组成的一个序列&#xff0c;给定一个整数sum&#xff0c;求长度最长的的连续子序列使他们的和等于sum&#xff0c;返回该子序列的长度&#xff0c;如果没有满足要求的序列返回-1。 二、输入描述 第1行有N个正整数组成的一个序列。 第2行给定一个整…

[MySQL]基础知识笔记(数据库与表操作)

内存与硬盘的区别&#xff1a; 内存&#xff1a;容量小&#xff0c;速度快&#xff0c;造价高&#xff0c;断电后数据丢失硬盘&#xff1a;容量大&#xff0c;速度慢&#xff0c;造价低&#xff0c;断电后数据不丢失 常见的关系型数据库&#xff1a; 1.ACCESS-微软出的在OFF…

【RPA开发】Beautiful Soup 使用详解

爬虫时通过 requests.get 方法获得 html 源代码后&#xff0c;通常需要从源代码中提取关键信息&#xff0c;这有多种方式&#xff0c;比如使用正则表达式匹配&#xff0c;也可通过 python 的第三方库 Beautiful Soup 实现定位提取关键信息&#xff0c;类似的库还有 lxml 第三方…

如何配置java环境以及tomcat详细步骤

jdk 下载安装及配置 jdk 官网地址: https://www.oracle.com/java/(opens new window) #1、jdk 下载 进入官网,定位到:Java -> Java SE -> Oracle JDK 点击进入,如下图所示: 选择 Java archive,再鼠标下拉页面,选择 Java SE 8 (8u202 and earlier) 下载 jdk-8u2…

一款综合地图应用Vue组件,内置了百度、高德、天地图瓦片

一、开源项目简介 新德汇地图应用类库 基于Openlayers的地图应用Vue组件。内置了百度、高德、天地图瓦片&#xff0c;并支持与方正、超图、山海经纬、航天精一等PGIS厂商对接。包含文本、图形、html、热力图、轨迹回放等20个组件&#xff0c;支持与ECharts结合实现散点、飞行…

scratch电子画板 少儿编程 电子学会图形化编程scratch编程等级考试二级真题和答案解析2023年3月

目录 scratch电子画板 一、题目要求 1、准备工作 2、功能实现 二、案例分析

12.java程序员必知必会类库之HTML解析库

前言 HTML是开发经常遇见的一种报文格式。但是我们日常中&#xff0c;更多是用它来渲染数据。利用他的很多各种标签&#xff0c;格式化我们的数据。一般前端接触的比较多。 但是&#xff0c;随着爬虫技术在互联网上越来越流行&#xff0c;如何处理我们爬到的HTML。。。我们当…