Accelerated C++笔记(1~5)

Accelerated C++

const

修饰内置类型变量,自定义对象,成员函数,返回值,函数参数
用来确保某个值不变

const修饰变量,作为一个常量,可以赋值给一个新的变量,但是常量始终不能改变

1
2
3
const int a=7;
int b = a; //可行
a = b //不可行

const修饰指针变量

  1. 修饰指针指向的内容,则内容为不可变变量
1
const int *p = 8;

指针指向的地址对应的内容不可变,也就是8是不可变的

  1. 修饰指针,指针为不可变内容
1
2
3
4
5
int a = 8,b=9;
int* const p = &a;

*p = 9;//可行
p = &b;//不可行

指针指向的地址是不可变的,但是对应的内容可变

  1. 修饰指针和指针指向的内容,指针和指针指向的内容都不可变
    就是将12合并起来了
1
2
int a = 8;
const int *const p = &a;

这样地址和地址对应的内容,都不可以修改

const搭配&避免复制值,提高效率

  • 避免传递容器时的拷贝开销(引用传递)
  • 保证内容不会被修改(const限制)
1
2
3
4
5
6
void printScores(const vector<double>& hw) { 
// 可以读取 hw 中的元素,但不能修改
for (double score : hw) {
cout << score << " ";
}
}

异常处理

  • throw:出现问题时,程序抛出异常,由throw完成
  • catch:在需要处理问题的地方,通过异常处理程序来捕获异常,由catch完成捕获
  • try{}:放置可能会出现异常的代码

抛出异常代码块

1
2
3
4
5
6
double division(int a, int b){
if( b == 0 ) {
throw "Division by zero condition!";
}
return (a/b);
}

捕获异常代码块

1
2
3
4
5
try{
c = division(1,0);
}catch (const cahr* msg){
cout << msg << endl;
}

此时的b的传参为0,就会触发抛出异常
主函数调用捕获到,之后就会进入catch中处理异常,而不是继续运行try{}中的代码

这是一个求中值的函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
double median(vector<double> homework) {
typedef vector<double>::size_type vector_size;

vector_size homework_size = homework.size();

if (homework_size == 0) {
throw domain_error("median of an empty vector");
}

sort(homework.begin(), homework.end());

vector_size mid = homework_size / 2;

return homework_size % 2 == 1 ? homework[mid] : (homework[mid] + homework[mid - 1]) / 2;
}

其中的抛出异常部分,就是当向量长度为0时,抛出异常

1
2
3
if (homework_size == 0) {
throw domain_error("median of an empty vector");
}

domain_error是一个异常对象,表示“参数的取值范围不符合函数的要求”,也就是定义域”错误”

异常的捕获及处理

1
2
3
4
5
try {
//此处省略
}catch (const domain_error& e){
cout << e.what();
}

.what() 用于返回描述异常信息的字符串,返回一个 const char* 类型的指针


Accelerated C++笔记(1~5)
http://www.ming-ice-tea.top/2025/11/04/Accelerated-C-笔记-1-5/
作者
Ming
发布于
2025年11月4日
许可协议