- 不能在类的析构函数中抛出异常;
- 建议父类的析构函数均声明为虚函数;建议有其他虚函数的类其析构函数也要声明为虚函数;
- 定义函数时,要做到想清楚以下几点:
- 先验条件(Preconditions):函数需要什么样的输入?
- 后验条件(Postconditions):函数保证提供什么样的输出?
- 不变量(Invariant):函数不能改变哪些东西?
- 副作用(Side effect):函数改变了哪些它作用域以外的东西?
- 例如:file.write()改变了写入的文件内容
- 目的(Propose):你写的函数是否有清晰的目的?函数是否达到了它的目的?
- 例如:ChangeStudentName():写它是为了修改学生姓名,它也确实修改了学生姓名
- 函数名(Name):函数名是否清晰地传达了函数的目的?
- 例如:Name()一般来说就不是一个好名字——对“Name”做了什么?
- 函数参数名(Parameter):函数参数名是否清晰易懂不会混淆?
- 例如:ChangeStudentName(a, b, c):a、b、c具体是什么东西?
- 不要在仿函数的
operator()
调用中修改数据成员,即保持其无状态(Stateless);
- 单行定义单个变量时,
&
或*
应紧贴类型名:int* a;
- 单行定义多个变量时,
&
或*
应紧贴变量名:int *a, &b;
- 为避免出现冲突,头文件不应该包含
using
语句;
- [[TODO]]