- 优化结构体中元素的布局。如果空间紧张,需要考虑节约空间,那么就需要讲结构体中的各个变量按照类型大小从小到大依次声明,尽量减少中间的填充字节。(因为结构体每个成员相对于结构体首地址的偏移量都是成员自身大小的整数倍)。也可以采用保留字节的形式显式的进行字节填充实现对齐,以提高存取效率。在某些时候,还可以通过编译器的pack指令调整结构体的对齐方式。用法为:#pragma pack(n) //设置n字节对齐
- 将强制转型减到最少。const_cast<T*>(a)用于从一个类中去除const、volatile和_unaligned属性。dynamic_cast<T*>(a)将a值转换为类型为T的对象指针,主要用来实现类层次结构的提升。这种转换较为严格和安全。reinterpret_cast<T*>(a)能够用于不相关类型之间的转换,因此它是不安全的,与C风格的强制转型很是类似。static_cast<T*>(a)将a的值转换为模板中指定的类型T,但是在运行转换过程中它不会进行类型检查,不能确保转换的安全性。
- 前缀操作符的效率要优于后缀操作符。因为在运行操作符之前编译器需要建立一个临时的对象。在实现中,后缀操作会先构造一个临时对象,并将原对象保存。然后完成自增操作,最后将保存对象原值的临时对象返回。前缀操作省去了临时对象的构造。对于整型和长整型的操作,前缀操作和后缀操作的性能区别通常是可以忽略的。
- 在定义变量时,尽可能推迟变量的定义,直到不得不需要该变量为止。同时为了减少变量名污染,提高程序可读性,尽量缩小变量的作用域。
- 区分typedef和#define之间的不同。不要用理解宏的思维方式对待typedef, typedef声明的新名称具有一定的封装性,更易定义变量,同时还要注意它是一个无”现实意义“的存储类关键字。
阅读《编写高质量代码》心得(2)
最新推荐文章于 2023-05-06 18:47:21 发布