C++的指针和引用参数
作函数参数,引用比指针更高效
因为编译器在做类型转换时,如果是指针类型,必须检查空值(NULL)
例如: CXxx类继承自接口类MYyy
class CXxx : public CBase,public MYyy
{...};
那么,如果一个函数接受MYyy指针的参数,而实际上传了CXxx对象指针,编译器必须坚查如果不是空指针,则必须把指针跳过CBase,指向CXxx对象中MYyy的部分,如果是空指针则不需如此。
比如,cp是一个CXxx指针,Func(MYyy*)函数接受MYyy指针。调用Func(cp)时编译器作了如下工作。
Func((MYyy* aM)(cp==NULL ? NULL : (TUint8*)cp+sizeof(CBase)));
引用不会为Null,所以使用引用做参数时没有必要检查NULL。
在ARM上,从CXxx指针转换到MYyy*指针的开销是8个指令,而对应的引用转换只开销了2个指令。