其他规则

  • 不能在类的析构函数中抛出异常;
  • 建议父类的析构函数均声明为虚函数;建议有其他虚函数的类其析构函数也要声明为虚函数;
  • 定义函数时,要做到想清楚以下几点:
    • 先验条件(Preconditions):函数需要什么样的输入?
      • 例如:sqrt(x),x>=0
    • 后验条件(Postconditions):函数保证提供什么样的输出?
      • 例如:sin(x)一定返回(-1, 1)
    • 不变量(Invariant):函数不能改变哪些东西?
      • 例如:sin(x)中不会改变x的值
    • 副作用(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]]
评论