| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C++ Primer 学习笔记(5) -> 正文阅读 |
|
[C++知识库]C++ Primer 学习笔记(5) |
第五章 语句5.1 简单语句 表达式语句:一个表达式末尾加上分号就变成了表达式语句。表达式语句的作用是执行表达式并丢弃掉求值结果。 空语句:最简单的语句是空语句,空语句中只含有一个单独的分号。某些看起来非法的分号往往只不过是一条空语句而已,从语法上说得过去。 复合语句:指用花括号括起来的(可能为空的——空块)语句和声明的序列,复合语句也被称作块。一个块就是一个作用域。 5.2 语句作用域 可以在if、switch、while和for语句的控制结构内定义变量,只在相应语句的内部可见。 5.3 条件语句 5.3.1 if语句 if语句中,condition必须用圆括号包围起来,condition可以是一个表达式,也可以是一个初始化了的变量声明。 有些编码风格要求在if或else之后必须写上花括号(对while和for语句的循环体两端也有同样的要求)。这么做的好处是可以避免代码混乱不清,以后修改代码时如果想添加别的语句,也可以很容易地找到正确位置。 悬垂else:C++规定else与离它最近的尚未匹配的if匹配,从而消除了程序的二义性。 5.3.2 switch语句 switch语句首先对括号里的表达式求值,也可以是一个初始化的变量声明,表达式的值转换成整数类型。 case关键字和它对应的值一起被称为case标签,case标签必须是整型常量表达式。任何两个case标签的值不能相同,否则就会引发错误,default也是一种特殊的case标签。 如果某个case标签匹配成功,将从该标签开始往后顺序执行所有case分支,除非程序显式地中断了这一过程,否则直到switch的结尾处才会停下来。 尽管switch语句不是非得在最后一个标签后面写上break,但是为了安全起见,最好这么做。 default标签 如果没有任何一个case标签能匹配上switch表达式的值,程序将执行紧跟在default标签后面的语句。即使不准备在default标签下做任何工作,定义一个default标签也是有用的。 标签不应该孤零零地出现,它后面必须跟上一条语句或者另外一个case标签。如果switch结构以一个空的default标签作为结束,则该default标签后面必须跟上一条空语句或一个空块。 switch内部的变量定义 switch允许跳过变量的定义,但不允许跳过变量的初始化。 如果需要为某个case分支定义并初始化一个变量,我们应该把变量定义在块内(使用花括号),从而确保后面的所有case标签都在变量的作用域外。 5.4 迭代语句 5.4.1 while语句 while的条件部分可以是一个表达式或者是一个带初始化的变量声明,但是不能为空。 定义在while条件部分或者while循环体内的变量每次迭代都经历从创建到销毁的过程。 使用场景:1、不知道要迭代多少次;2、想在循环结束后访问循环控制变量 5.4.2 传统for语句 for语句的语法形式是: for (init-statement; condition; expression) ??? statement init-statement必须是以下三种形式中的一种:声明语句、表达式语句或者空语句。init-statement可以定义多个对象吧,但是所有变量的基础类型必须相同。只在循环开始时执行一次。 for语句头能省略掉init-statement、condition和expression中的任何一个(或者全部)。 5.4.3 范围for语句 可以遍历容器或其他序列的所有元素:用花括号括起来的初始值列表、数组、vector或string等类型的对象。这些类型的共同特点是拥有能返回迭代器的begin和end成员。 最简单的方法是使用auto类型说明符。每次迭代都会重新定义循环控制变量。 5.4.4 do while语句 do while语句和while语句唯一的区别是:do while语句先执行循环体后检查条件,不管条件的值如何,我们都至少执行一次循环。 do while语句应该在括号包围起来的条件后面用一个分号表示语句结束。 与while语句一样,condition不能为空。不一样的是,condition使用的变量必须定义在循环体之外。 5.5 跳转语句 C++提供了4种跳转语句:break、continue、goto和return。 5.5.1 break语句 break语句的作用范围仅限于最近的循环(while、do while、for)或者switch,并从这些语句之后的第一条语句开始继续执行。 5.5.2 continue语句 continue语句终止最近的循环中的当前迭代并立即开始下一次迭代,continue语句只能出现在for、while和do while循环的内部,只有当switch语句嵌套在迭代语句内部时,才能在switch里使用continue。 5.5.3 goto语句 goto语句的作用是从goto语句无条件跳转到同一函数内的另一条语句。 带标签语句:是一种特殊的语句,在它之前有一个标示符以及一个冒号。 goto语句也不能将程序的控制权从变量的作用域之外转移到作用域之内。 5.6 try语句块和异常处理 异常处理机制为程序中异常检测和异常处理这两部分的协作提供支持。在C++语言中,异常处理包括:throw表达式、try语句块和一套异常类(用于在throw表达式和相关的catch子句之间传递异常的具体信息)。 5.6.1 throw表达式 程序的异常检测部分使用throw表达式引发一个异常,包含关键字throw和紧随其后的一个表达式,其中表达式的类型就是抛出的异常类型。 抛出异常将终止当前的函数,并把控制权转移给能处理该异常的代码。 5.6.2 try语句块 try块之后跟着一个或多个catch子句,catch子句包括三部分:关键字catch、异常声明以及一个块。当选中了某个catch子句处理异常之后,执行与之对应的块。catch子句也被称为异常处理代码。 try语句块内声明的变量在块外部无法访问,特别是在catch子句内也无法访问。 当异常被抛出时,首先搜索抛出该异常的函数。如果没找到匹配的catch子句,终止该函数,并在调用该函数的函数中继续寻找。如果还是没有找到匹配的catch子句,这个新的函数也被终止,继续搜索调用它的函数,以此类推。如果最终还是没有找到任何匹配的catch子句,程序转到名为terminate的标准库函数。该函数的行为与系统有关,一般情况下,执行该函数将导致程序非正常退出。如果一段程序没有try语句块且发生了异常,系统会调用terminate函数并终止当前程序的执行。 5.6.3 标准异常 C++标准库定义了一组异常类: 1、exception头文件:最通用的异常类exception,只报告异常的发生,不提供任何额外信息; 2、new头文件,定义了bad_alloc异常类型 3、type_info头文件,定义了bad_cast异常类型 4、stdexcept头文件 标准库异常类只定义了几种运算:创建或拷贝异常类型的对象,为异常类型的对象赋值 前三种只能以默认初始化的方式初始化对象,不允许为这些对象提供初始值。 其他异常类型的行为则恰好相反,应该使用string对象或者C风格字符串初始化,不允许使用默认初始化的方式。 异常类型只定义了一个名为what的成员函数,返回值是一个指向C风格字符串的const char*。如果异常类型有一个字符串初始值,则what返回该字符串,对于无初始值的异常类型来说,what返回的内容由编译器决定。 术语表 复合语句:和块是同义词 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/11 10:08:31- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |