More Effective C++(条款一 仔细区别pointers和references )

本文对比了C++中引用和指针的特点与用法。强调引用必须初始化且不能改变所指对象,而指针可以重新指向不同的对象。讨论了它们在效率、安全性和操作符重载方面的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、没有所谓的空引用,但可以有空指针

2、引用必须初始化,指针不一定要初始化

int &a;//错误,没有初始化
int b=1;
int &rb=b;//正确,rb指向b
int *p;//未初始化指针,正确,却风险高

3、没有所谓的空引用==》引用可能比使用指针更高效,因为使用引用不用测试其有效性

void printDouble(const double& rd)
{
   cout<<rd;//不需测试rd,它一定指向某个double
}
void printDouble(const double* pd)
{
   if(pd){//测试是否为空指针
   cout<<*pd;
}
}

4、指针可以重新赋值,但引用总是指向最初获得的那个对象

string s1("nancy");
string s2("lucy");
string &rs=s1;//rs代表s1
string *ps=&s1;//ps指向s1
rs=s2;//rs仍然代表s1,但s1的值变为lucy
ps=&s2;//现ps指向s2,s1没变

5、其他情况也需使用引用:例operator[],该操作符必须返回能被当做“赋值对象”的东西

vector<int> v(10);//产生一个int vector,大小为10
v[5]=2;//assignment的赋值对象是operator[]的返回值

若operator[]返回值是指针,则应写为:

*v[5]=2;
但这使v看起来像是一个以指针形成的vector,事实不是。为此,总应使operator[]返回引用

结论:

选引用:当需要指向某东西,而且绝不会指向其他东西,或实现一个操作符而其语法需求无法有指针达成

选指针:其他任何时候


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值