登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 168|回复: 0

C++Primer学习笔记05.语句

[复制链接]

44

主题

-24

回帖

30

积分

新手上路

积分
30
发表于 2025-1-2 22:48:39 | 显示全部楼层 |阅读模式

语句

作用域

定义在控制结构当中的变量只在相应语句的内部可见,一旦语句结束,变量也就超出其作用范围了

while(int i = get_num()) // 每次迭代时创建并初始化 1
    cout<< i <<endl;
i = 0; // 错误,在循环外部无法访问 i

条件语句

if 语句的使用,不赘述。

switch 语句

#include<iostream>

using std::cout;
using std::cin;
using std::endl;
using std::begin;
using std::end;

int main() {
    // switch 统计 a-c 字符出现的个数
    char c;
    int ca = 0;
    int cb = 0;
    int cc = 0;
    while (cin >> c) {
        switch (c) {
            case 'a':
                ca++;
                break;
            case 'b':
                cb++;
                break;
            case 'c':
                cc++;
                break;
            default:
                cout << "over";
        }
    }
    cout << "ca=" << ca;
    cout << "cb=" << cb;
    cout << "cc=" << cc;
}

switch 的简写,不要省略 break;

switch(ch){
    case 'a': case 'e': case 'i': case 'o':
        ++cnt;
        break;
}

<b>switch 内部的变量定义</b>

目前不是很明白书里说的,但是在 switch 内部定义变量的话,建议这样做。

case true:
    {
        string file_name = get_file_name();
    }
    break;
case false:
    // some code;

迭代语句

while 循环、for 循环、 范围 for(Java 的增强 for)、do while

跳转语句

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

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

goto:从 goto 语句无条件跳转到同一函数内的另一条语句。不要在程序中使用 goto 语句,因为它使得程序既难理解又难修改,这里也就不记怎么用 goto 了。

throw表达式

抛出异常,throw exception_obj;

if(a!=b)
    throw runtime_error("a!=b");
cout<<"a=b"<<endl;

类型 runtime_error 是标准库异常类型的一种,定义在 stdexcept 头文件中。后面学异常的时候再讨论。

try语句块

try 语句块的通用语法形式是

try{
    program-statements
}cache(exception-declaration){
    handler-statements
}catch(exception-declaration){
    handler-statements;
}// ...

捕获异常的代码

#include<iostream>
#include<string>

using std::cout;
using std::cin;
using std::endl;
using std::begin;
using std::end;
using std::string;
using std::runtime_error;

int main() {
    int item1, item2;
    while (cin >> item1 >> item2) {
        try {
            if (item1 != item2) {
                throw runtime_error("item1!=item2");
            }
        } catch (runtime_error err) {
            cout << err.what() << endl;
            char c;
            cin >> c;
            if (c == 'q') {
                cout << "不继续处理了,退出!";
                break;
            }
        }
    }
}

标准异常

C++ 标准库定义了一组类,用于报告标准库函数遇到的问题。这些异常类也可以在用户编写的程序中使用,它们分别定义在 4 个头文件中。

  • exception:定义了最通用的异常类 exception。它只报告异常的发生,不提供任何额外信息。
  • stdexcept:定义了几种常用的异常类
  • new:定义了 bad_alloc 异常类型
  • type_info:定义了 bad_cast 异常类型

<div align="center"><h6><stdexcept>定义的异常类</h6></div>

异常类型 说明
exception 最常见的问题
runtime_error 只有在运行时才能检查出的问题
range_error 运行时错误:生成的结果超出了有意义的值域范围
overflow_error 运行时错误:计算上溢
underflow_error 运行时错误:计算下溢
logic_error 程序逻辑错误
domain_error 逻辑错误:参数对应的结果值不存在
invalid_argument 逻辑错误:无效参数
length_error 逻辑错误:试图创建一个超出该类型最大长度的对象
out_of_range 逻辑错误:使用一个超出有效范围的值

我们只能以默认初始化的方式初始化 exception、bad_alloc 和 bad_cast 对象,不允许为这些对象提供初始值。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|断点社区 |网站地图

GMT+8, 2025-1-19 02:18 , Processed in 0.057510 second(s), 27 queries .

Powered by XiunoBBS

Copyright © 2001-2025, 断点社区.

快速回复 返回顶部 返回列表