---
sidebar_position: 14
tags: [Language, C++, Error, Exception]
---

# Error

- class 体内声明为 friend/static/virtual 方法, class 体外实现时**不加 friend/static/virtual 关键字**
- const/static 使用错误

```cpp
static int x;
A(x++, y++); // 若 A 中改变x, 会使得 x++ 无效化
```

- 不可以**new 抽象类(堆实例)/构造抽象类的栈实例**, 函数参数/返回值不可直接定义为抽象类(调用时无法构造栈实例), 但可以定义为**抽象类的引用/指针**
- 返回类型不匹配错误
- 初始化构造函数不存在(基类定义有参构造函数, 派生类必须显示调用父类构造函数)错误
- 引用/const/对象成员初始化错误
- 访问控制权限错误(e.g. 在全局声明一个只有私有构造函数的类实例)
- 派生控制权限错误(只可恢复原先权限, 不可任意修改父类成员权限)
- 运算符重载分类错误(不可重载, 只可重载为...)
- 成员指针与普通指针(静态成员指针)的混用错误
- 单参数构造函数与强制类型转换重载函数在表达式中的隐式调用错误
- 指针不可指向引用等引用类型的特性错误
  - 引用变量不分配存储单元: 不能引用 引用变量, 不能作为指针所指对象, 不能作为数组元素
  - 引用变量的值按字节(指针/地址)编码: 不能引用位段(无法按字节编码)
  - 引用变量不能引用引用变量, 只能引用另一个引用变量所引用的变量/地址
  - 引用变量可以引用 register 变量, 编译器会将其自动转为 auto 变量(为其分配地址)

## Exception

异常对象的析构:

catch (`const A *a`) 形式
