- 仔细区别pointer与reference
pointer采用*与->操作符,reference采用()操作符。
首先reference没有null reference,所以在使用reference的时候不需要检测其有效性。而使用pointer可以指向对象,也可以不指向任何对象,为空指针,所以在使用的时候要检测其有效性。
void printdouble(const double& x){
cout<<x<<endl;
}
void printdouble(const double* x){
if(*x){
cout<<*x<<endl;
}
}
一个reference必须总是代表一个对象,因此要求reference必须设立初值
string& rs //错误
string s("sdasdas");
string& rs=s;//正确
string *ps;//正确但是风险极高
pointer与reference之间的一个重要差异就是pointer还可以被赋值指向另外一个对象,而reference总是指向它最初获得的那个对象。所以一般而言,当你考虑不指向任何对象或者在不同的时间指向不同的对象的能力时应该用pointer。
当你确定你总会代表某个对象,不再改变就应该用reference,或者再实现某些操作符的时候,比如operator[],这个操作符必须返回能够被当做assignment赋值对象的东西,所以总是应该让你的operator[]返回reference。
总结:当你需要指向某个东西,而绝不改变指向其他东西,或是当你实现一个操作符其语法需求无法由pointer完成时,用reference,其他任何时候用pointer。
参考:《more Effective c++》