【C++】指针与引用

引用并不产生对象的副本,仅仅是对象的同义词。因此,当下面的语句执行后:
int x;
int & refx=x;
x = 12;
refx和x都具有12的值。
引用必须在定义时马上被初始化,因为它必须是某个东西的同义词。你不能先定义一个引用后才初始化它。

引用的一个重要作用就是作为函数的参数类型。C/C++的函数参数是传值的,如果有大对象(例如一个大的结构)需要作为参数传递的时候,以前的(C语言中)方案往往是指针,因为这样可以避免将整个对象全部压栈,可以提高程序的效率。但是现在(C++中)又增加了一种同样有效率的选择,就是引用。

如果一个函数返回了引用,那么该函数的调用也可以被赋值。

double &max(double &d1,double &d2)
{
    return d1>d2?d1:d2;
}
int main()
{
    double dval1 = 12.0,dval2 = 20;
    max(dval1,dval2) += 24;
    cout<<dval2<<endl;
    return 0;
}

引用作为返回值的时候,有一些规则必须遵守。这些规则包括:
不能返回局部变量的引用。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了“无所指”的引用,程序会进入未知状态。

不能返回函数内部new分配的内存的引用。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成内存泄露。

可以返回类成员的引用,但最好是const。

常量引用

用这种方式声明的引用,不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,达到了引用的安全性。

int getNumber(const MyClass &mc)const
{
    return mc.money;
}

这样做的好处是其中的mc类对象既不产生副本的拷贝,由于是常量引用,所以也不用担心失误把mc中的某个数据意外修改了。

引用与指针有很大的区别,指针是个变量,可以把它再次赋值成指向别处的地址,但是建立引用时必须初始化,并且决不会再关联其他的任何变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值