ThankNeko's Blog ThankNeko's Blog
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)

Hoshinozora

尽人事,听天命。
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)
  • Python笔记

  • C笔记

  • C++笔记

    • C++基本介绍
    • C++基本介绍
    • C++字符串与向量与数组
    • C++字符串与向量与数组
    • C++语句
      • 语句
        • 介绍
        • 空语句
        • 复合语句
        • 条件语句
        • 循环语句
        • 跳转语句
        • 异常处理语句
    • C++函数
    • C++类
    • C++标准库
  • Arduino笔记

  • Dev
  • C++笔记
Hoshinozora
2024-05-23
目录

C++语句

# 语句

# 介绍

C++的语句大多数都是以分号结束,用以分隔多条语句。虽然多条语句可以写在一行,但为了提高代码可读性,一般是每行只写一条语句。 一般情况下,语句是顺序执行的,但在大多数情况下,顺序执行并不能满足使用,因此就需要有控制流语句以支持更复杂的执行路径。

# 空语句

最简单的语句是空语句,就只有一个分号";"。空语句一般用于占位,使用空语句应该加上注释,以表示该语句是有意省略的。 例如:

; // 我是一条空语句
1

# 复合语句

复合语句又称为块,它是用花括号括起来的语句和说明的序列,用于逻辑上需要多条语句的地方,例如判断、循环等,一个块就是一个作用域。 例如:

// 只需要执行一条语句则可以不用复合语句。
if (1 == 1) cout << "yes" << endl;

// 想要执行多条语句就需要使用复合语句。
if (1 == 1){
    cout << "yes" << ends;
    cout << "i do." << endl;
}
1
2
3
4
5
6
7
8

在判断、循环等地方,即便只执行一条语句,也建议使用花括号,这样可以使代码更清晰明确。

# 条件语句

# if语句

格式:

// 单分支
if(condition)
    statement

// 双分支
if(condition)
    statement1
else
    statement2

// 多分支
if(condition1)
    statement1
else if(condition2) // 可有多个else if
    statement2
else // 可选else
    statement3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# switch语句

格式:

switch(expression){
    // 如果expression的值等于value则会执行,需要加break跳出switch,否则会继续执行后续case中的代码,直到swtich结尾或遇到break。
    case value1:
        statement1
        break;
    // 可有多个case。
    case value2:
        statement2
        break;
    // 对于匹配值不同,但执行代码相同,可以用如下写法。
    case value3:
    case value4:
        statement3
        break;
    // 如果要在某个case分支初始化变量,应当将变量定义在块内,以确保后面的所有case标签都在变量的作用域之外。
    case value5:
        {
            statement4
        }
        break;
    // default写在最下方,表示匹配任意值,也就是如果上面都没break跳出,则会无条件执行default下的代码块。
    default:
        statement5
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# 循环语句

# while语句

格式:

while(condition)
    statement
1
2

# 传统for语句

格式:

for(init-statement; condition; expression)
    statement
1
2

# 范围for语句

格式:

for(declaration : expression)
    statement
1
2

# do while语句

格式:

do
    statement
while (condition);
1
2
3

# 跳转语句

# break语句

break用于跳出离该语句最近的while、do while、for、switch语句。

# continue语句

break用于本次跳过离该语句最近的循环。

# goto语句

都不推荐,就不说了。

# return语句

跳出语句所在函数返回指定值。

# 异常处理语句

# 介绍

异常是程序运行时的反常行为,这些行为超出了函数正常功能的范围。而异常处理语句可以检测此类反常行为,并针对不同反常行为进行不同的处理。 异常处理机制包含异常检测和异常处理两方面,异常检测使用throw表达式,异常处理使用try-catch语句块。

# throw表达式

throw表达式用于引发(raise)异常。在我们的程序遇到某些无法处理的情况时,就可以使用throw表达式来抛出一个异常来表示。例如我们的函数需要一个大于10的整数值,但是传进了一个小于10的值,此时就可以使用throw来引发一个异常。 throw表达式的格式为:throw 异常类型("异常信息"); 例如:

if(item1.isbn() != item2.isbn()){
    throw runtime_error("Data must refer to same ISBN");
}
1
2
3

# try-catch语句块

try-catch语句块用于捕获抛出的异常并进行对应的处理。

函数抛出异常后会中断程序的正常流程,程序会从内往外查找是否有匹配的catch子句。如果内层函数找到了匹配的catch子句就会执行相应的处理代码,函数会继续执行。如果内层函数没有找到匹配的catch子句,函数会终止执行,并迭代往外层函数查找。

如果没有找到任何匹配的catch子句,程序就会转到名为terminate的标准库函数,执行该函数将导致程序非正常退出。

try-catch的格式为:

try{
    program-statements
}catch (exception-declaration){
    handler-statements
}catch (exception-declaration){
    handler-statements
} // ...
1
2
3
4
5
6
7

# 标准异常

C++标准库定义了一组异常类,用于报告标准库函数遇到的问题。这些标准库异常类也可以在用户编写程序时使用。

C++标准库异常类定义在4个头文件中:

  • <exception> 定义了最通用的exception异常类型,它能匹配任何异常,但不能提供任何额外信息。
  • <new> 定义了bad_alloc异常类型。
  • <type_info> 定义了bad_cast异常类型。
  • <stdexcept> 定义了几种常用的异常类型,如下表所示。
异常类型 作用
exception 最通用的异常类型
runtime_error 只有在运行时才能检测出的问题
range_error 运行时错误:生成的结果超出了有意义的值范围
overflow_error 运行时错误:计算上溢
underflow_error 运行时错误:计算下溢
logic_error 程序逻辑错误
domain_error 逻辑错误:参数对应的结果值不存在
invalid_argument 逻辑错误:无效参数
length_error 逻辑错误:试图创建一个超出该类型最大长度的对象
out_of_range 逻辑错误:使用一个超出有效范围的值

对于exception、bad_allloc、bad_cast异常类型,我们只能使用默认初始化,不能允许指定初始值,也就是不能提供额外的信息。 其他类型则恰恰相反,必须使用string对象或C风格字符串初始化来提供异常信息,不允许使用默认初始化。

#C++#语句#异常处理
C++字符串与向量与数组
C++函数

← C++字符串与向量与数组 C++函数→

最近更新
01
二〇二五年四月十七日随笔
04-17
02
二〇二五年四月十六日随笔
04-16
03
二〇二五年四月九日随笔
04-09
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Hoshinozora | MIT License
湘ICP备2022022820号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式