【c++语言特性—面试必考点】第一篇:指针与引用的区别

  1. 仔细区别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++》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值