高质量C/C++编译指南 学习笔记

1、添加

     #ifndef _XXX_H_
     #define _XXX_H_
     .....
     #endif

至头文件,防止头文件被重复引用而引起的重定义问题
2、#include<XXX.h>将从标准库目录开始搜索
#include"XXX.h"是从用户工作目录开始搜索
3、浮点数与0值比较:
无论float还是double变量,都有精度限制,不能直接用‘=’或者‘!=’来与数字比较,应该设法转化为“>=”或者“<=”形式。
eg:

    if((x>=-EPSION) && (x<=EPSION))   
         //EPSION是精度,一般取0.000001

4、const与#define比较
C++语言可以用const来定义常量,也可以用#define来定义常量,但是前者有更多的优点
i、const有数据类型,编译器可以对其进行类型安全检查;#define没有数据类型,只是在编译时进行符号替换,因此也没有数据类型安全检查
ii、有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试
5、如果参数是指针,且仅作输入时使用,则应该类型前加上const,防止该指针在函数体内被随意修改
6、如果函数输入参数以值传递方式传递对象,则宜改为“const &”方式来传递,这样可以省去临时对象的构造与析构过程,从而提高效率
7、防止内存耗尽
i、判断指针为空,则马上return来终止函数:

 void fun(void){
    A *a = new A();
    if(a==nullptr)return;       
}

ii、判断指针为空,则马上调用exit(1)来终止整个程序运行

void fun(void){
    A *a = new A();
    if(a==nullptr)exit(1);
}

8、重载、覆盖与隐藏
i、成员函数被重载的特征:

  • 相同的范围(在同一个类中)
  • 函数名字相同
  • 参数类型或(和)者个数不同
  • virtual关键字可有可无

ii、成员函数被覆盖的特征

  • 不同的范围(分别位于派生类与基类)
  • 函数的名字形同
  • 参数形同
  • 基类必须有virtual关键字

iii、隐藏规则

  • 如果派生类的函数与积累的函数同名,但参数不同,此时,无论有无virtual关键字,基类的函数将被隐藏
  • 如果派生类的函数与基类函数同名,且参数也相同,但是基类没有virtual关键字,基类的函数将被隐藏
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章