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

本文介绍了C++编程中的多种技巧与最佳实践,包括预防头文件重复引用、正确使用const与#define、浮点数比较的方法、内存管理的策略、以及函数重载、覆盖与隐藏的区别等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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关键字,基类的函数将被隐藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值