Cpp学习笔记三

Cpp学习笔记三

  1. try语句
  2. 函数参数
  3. 函数返回值
  4. 生命期

try语句

try语句用于处理程序异常
使用throw抛出异常,在try语句块中出现的异常使用 catch进行捕获

  • 抛出异常
    使用throw表达式抛出异常
    例如:
throw runtime_error("message")

来抛出一个异常

每个标准库的异常类都有一个名为what的函数,返回C风格字符串

  • try语句块
    语法:
try
{
    
    
	...
}
catch(...)
{
    
    
	...
}

抛出一个异常时,首先搜寻抛出异常的函数
若没有找到匹配的catch,则终止该函数的执行,并执行调用者的匹配的catch,若仍然没有找到,则层层上调。

若最终未找到,则函数将跳转到名为terminate的函数中。

  • 异常类
    C++标准库定义的常见的异常i类有:
  1. exception类
  2. runtime_error
  3. range_error
  4. logic_error
  5. invalid_error

函数参数

C++和C语言的参数基本上都是传值,C语言可以通过传递指针来进行相应的操作
C++有一些不一样的东西

  • 传引用参数
void swap(int &a, int &b)
{
    
    
	int tmp = a;
	a = b;
	b = tmp;
}

优点:和指针很像,但是更安全,而且避免了复制对象
加上一个const,引用就不能被修改,更加安全
例如int len(const string &s)

  • vector等容器的形参
    一般来说,沙比才会把整个vector都当成参数
    那种操作会把整个vector全部复制过去
    一般使用引用传参(不知道指针可不可),或者传递vector的迭代器进去,例如
    void func(vector<int>::const_iterator start, vector<int>::const_iterator end)

  • 数组的指针传递和引用传递
    这种方式,数组大小和函数声明的不一样也没关系
    void func(int a[10])
    这种方式,数组大小必须和函数声明的一样
    void func(int (&a)[10])

默认实参

就是在函数声明的时候就给它来一个参数
默认实参只能提供给尾部实参
在一个文件中,只能为一个实参指定默认实参一次
声明的时候给它来一个默认实参够了

函数返回值

函数可以返回对象的引用,这样子可以避免对象的复制
注意,千万不能返回局部对象的引用
类比C语言的指针,返回一个局部对象的指针是没有意义的

生命期

我觉得这个概念就是C语言的作用域,就是说得高大上了一点
但是生命期还是有和作用域不一样的地方的

例如,C++的对象出了它的作用域就会被销毁,分配的内存也会被销毁
C语言明显没有内存自动管理机制,一切都得自己动手。这样子才有掌控全局的舒爽感嘛。

猜你喜欢

转载自blog.csdn.net/weixin_45206746/article/details/112802368