菜鸟学习C++的引用

#include<iostream>
using namespace std;
int & f(int & a)  //传入a,产生一个局部变量a(仅在f()中生存)
{
    return a;     //要返回a,返回的是局部变量a的引用
}                 //整个函数的效果是返回a的引用的引用,在main()函数中赋给main()中的a,使它成为了i的引用,i和a是同一个数据的两个名字,一个变,另一个也变化
void main()
{
    int i=6;
    int & a=f(i);   
    cout<<"a="<<a<<endl;
    a=90;
    cout<<"i="<<i<<endl;
}

从上面知道,如果形参由int & a改为了int a,则返回的是局部变量a的引用,但a在f(i)执行之后已经消失,cout<<a得到的结果是乱七八糟的一个数

如果不希望a有修改i的权限,可以加个const限制,这样就修改不了了。

#include<iostream>
using namespace std;
const int & f(int & a)   
{
    return a;
}
void main()
{
    int i=6;
    const int & a=f(i);   
    cout<<"a="<<a<<endl;
    a=90;
    cout<<"i="<<i<<endl;
}
//error C2166: l-value specifies const object

函数的形参选择引用往往能减少内存的占用,但是为了保证安全性,有时给形参前加const以保护外部数据。

#include<iostream>
using namespace std;
int & f(const int &a)   
{
    a=3;     //错
    return a;
}
void main()
{
    int i=6;
    int & a=f(i);   
    cout<<"a="<<a<<endl;
    a=90;
    cout<<"i="<<i<<endl;
}

//l-value specifies const object

 

posted @ 2013-05-11 18:20  wkl7123  阅读(142)  评论(0)    收藏  举报