不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高,因为在使用引用之前不需要测试它的合法性:
1 void printDouble(const double& rd) 2 { 3 cout << rd; // 不需要测试rd,它肯定指向一个double值 4 }
相反,指针则应该总是被测试,防止其为空:
1 void printDouble(const double *pd) 2 { 3 if (pd) { // 检查是否为NULL 4 cout << *pd; 5 } 6 }
奇技淫巧:
1 int main() 2 { 3 int *a = 0; 4 int& b = *a;//说好的不能为空呢? 5 6 return 0; 7 }